package rag import ( "encoding/json" "eta/eta_api/cache" "eta/eta_api/controllers" "eta/eta_api/models" "eta/eta_api/models/rag" "eta/eta_api/models/rag/request" "eta/eta_api/models/rag/response" "eta/eta_api/models/system" "eta/eta_api/utils" "fmt" "github.com/rdlucklib/rdluck_tools/paging" "html" "strings" "time" ) // WechatPlatformController // @Description: 微信公众号管理 type WechatPlatformController struct { controllers.BaseAuthController } // TagList // @Title 获取ppt列表 // @Description 获取ppt列表接口 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Param KeyWord query string true "搜索关键词" // @Success 200 {object} models.TagListResp // @router /tag/list [get] func (c *WechatPlatformController) TagList() { br := new(models.BaseResponse).Init() defer func() { c.Data["json"] = br c.ServeJSON() }() sysUser := c.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" return } pageSize, _ := c.GetInt("PageSize") currentIndex, _ := c.GetInt("CurrentIndex") keyWord := c.GetString("KeyWord") var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = utils.StartIndex(currentIndex, pageSize) var condition string var pars []interface{} if keyWord != "" { condition = fmt.Sprintf(` AND %s = ?`, rag.WechatPlatformColumns.Nickname) pars = append(pars, `%`+keyWord+`%`) } obj := new(rag.Tag) total, list, err := obj.GetPageListByCondition(condition, pars, startSize, pageSize) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } page := paging.GetPaging(currentIndex, pageSize, total) resp := new(response.TagListResp) resp.Paging = page resp.List = list br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // Add // @Title 新增公众号 // @Description 新增公众号 // @Param request body request.AddWechatPlatformReq true "type json string" // @Success 200 Ret=200 新增成功 // @router /wechat_platform/add [post] func (c *WechatPlatformController) Add() { br := new(models.BaseResponse).Init() defer func() { c.Data["json"] = br c.ServeJSON() }() var req request.AddWechatPlatformReq err := json.Unmarshal(c.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } req.Name = strings.TrimSpace(req.Name) if req.Name == "" { br.Msg = "请输入公众号名称" br.IsSendEmail = false return } req.Link = strings.TrimSpace(req.Link) if req.Link == "" { br.Msg = "请输入文章链接" br.IsSendEmail = false return } var condition string var pars []interface{} condition = fmt.Sprintf(` AND %s = ?`, rag.WechatPlatformColumns.Nickname) pars = append(pars, req.Name) obj := new(rag.WechatPlatform) item, err := obj.GetByCondition(condition, pars) if err != nil && !utils.IsErrNoRow(err) { br.Msg = "公众号信息获取失败" br.ErrMsg = "公众号信息获取失败,Err:" + err.Error() return } if item.WechatPlatformId > 0 { br.Msg = "公众号名称重复" br.IsSendEmail = false return } item = &rag.WechatPlatform{ WechatPlatformId: 0, FakeId: "", Nickname: req.Name, Alias: "", RoundHeadImg: "", ServiceType: 0, Signature: "", Verified: 0, ArticleLink: req.Link, Enabled: 0, SysUserId: c.SysUser.AdminId, ModifyTime: time.Now(), CreateTime: time.Now(), } err = item.Add(req.TagIdList) if err != nil { br.Msg = "添加失败" br.ErrMsg = "添加失败,Err:" + err.Error() return } // 异步新增公众号 //go llm.AddWechatPlatform(item) go cache.AddWechatArticleOpToCache(item.WechatPlatformId, `add`) br.Ret = 200 br.Success = true br.Msg = `添加成功` } // FollowList // @Title 我关注的接口 // @Description 我关注的接口 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Param KeyWord query string true "搜索关键词" // @Success 200 {object} []*rag.WechatPlatform // @router /wechat_platform/list/follow [get] func (c *WechatPlatformController) FollowList() { br := new(models.BaseResponse).Init() defer func() { c.Data["json"] = br c.ServeJSON() }() sysUser := c.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" return } pageSize, _ := c.GetInt("PageSize") currentIndex, _ := c.GetInt("CurrentIndex") keyWord := c.GetString("KeyWord") var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = utils.StartIndex(currentIndex, pageSize) var condition string var pars []interface{} if keyWord != "" { condition = fmt.Sprintf(` AND %s = ?`, rag.WechatPlatformColumns.Nickname) pars = append(pars, `%`+keyWord+`%`) } condition = fmt.Sprintf(` AND b.%s = ?`, rag.WechatPlatformUserMappingColumns.SysUserID) pars = append(pars, c.SysUser.AdminId) if keyWord != "" { condition = fmt.Sprintf(` AND %s = ?`, rag.WechatPlatformColumns.Nickname) pars = append(pars, `%`+keyWord+`%`) } obj := new(rag.WechatPlatformUserMapping) list, err := obj.GetListByCondition(condition, pars, startSize, pageSize) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = list } // PublicList // @Title 公共列表 // @Description 公共列表 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Param KeyWord query string true "搜索关键词" // @Success 200 {object} models.WechatPlatformListResp // @router /wechat_platform/list/public [get] func (c *WechatPlatformController) PublicList() { br := new(models.BaseResponse).Init() defer func() { c.Data["json"] = br c.ServeJSON() }() sysUser := c.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" return } pageSize, _ := c.GetInt("PageSize") currentIndex, _ := c.GetInt("CurrentIndex") keyWord := c.GetString("KeyWord") var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = utils.StartIndex(currentIndex, pageSize) var condition string var pars []interface{} if keyWord != "" { condition = fmt.Sprintf(` AND %s = ?`, rag.WechatPlatformColumns.Nickname) pars = append(pars, `%`+keyWord+`%`) } obj := new(rag.WechatPlatformUserMapping) list, err := obj.GetListByCondition(condition, pars, startSize, 100000) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } resp := make([]response.WechatPlatformPublicListResp, 0) if list != nil && len(list) > 0 { userIdList := make([]int, 0) uerIdMap := make(map[int]bool) userFollowIndexMap := make(map[int]int) for _, v := range list { if _, ok := uerIdMap[v.FollowUserId]; !ok { userIdList = append(userIdList, v.FollowUserId) uerIdMap[v.FollowUserId] = true } index, ok := userFollowIndexMap[v.FollowUserId] if !ok { userFollowIndexMap[v.FollowUserId] = len(resp) resp = append(resp, response.WechatPlatformPublicListResp{ UserId: v.FollowUserId, List: []*rag.UserFollowWechatPlatform{v}, }) } else { resp[index].List = append(resp[index].List, v) } } userList, err := system.GetAdminListByIdList(userIdList) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } userNameMap := make(map[int]*system.Admin) for _, v := range userList { userNameMap[v.AdminId] = v } for k, v := range resp { userInfo, ok := userNameMap[v.UserId] if !ok { continue } resp[k].Name = userInfo.RealName + `关注` } } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // PublicList // @Title 公共列表 // @Description 公共列表 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Param KeyWord query string true "搜索关键词" // @Success 200 {object} models.WechatPlatformListResp // @router /wechat_platform/op [post] func (c *WechatPlatformController) Op() { br := new(models.BaseResponse).Init() defer func() { c.Data["json"] = br c.ServeJSON() }() sysUser := c.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" return } var req request.OpWechatPlatformReq err := json.Unmarshal(c.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.WechatPlatformId <= 0 { br.Msg = "参数错误" return } if req.Status < 0 || req.Status > 1 { br.Msg = "参数错误" return } obj := rag.WechatPlatform{} wechatPlatform, err := obj.GetByID(req.WechatPlatformId) if err != nil { br.Msg = "修改失败" br.ErrMsg = "修改失败,Err:" + err.Error() if utils.IsErrNoRow(err) { br.Msg = "公众号不存在" br.IsSendEmail = false } return } wechatPlatform.Enabled = req.Status wechatPlatform.ModifyTime = time.Now() err = wechatPlatform.Update([]string{"enabled", `modify_time`}) if err != nil { br.Msg = "修改失败" br.ErrMsg = "修改失败,Err:" + err.Error() return } br.Ret = 200 br.Success = true br.Msg = "修改成功" } // Refresh // @Title 公共列表 // @Description 公共列表 // @Success 200 {object} models.WechatPlatformListResp // @router /wechat_platform/refresh [post] func (c *WechatPlatformController) Refresh() { br := new(models.BaseResponse).Init() defer func() { c.Data["json"] = br c.ServeJSON() }() sysUser := c.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" return } var req request.RefreshWechatPlatformReq err := json.Unmarshal(c.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.WechatPlatformId <= 0 { br.Msg = "参数错误" return } obj := rag.WechatPlatform{} wechatPlatform, err := obj.GetByID(req.WechatPlatformId) if err != nil { br.Msg = "修改失败" br.ErrMsg = "修改失败,Err:" + err.Error() if utils.IsErrNoRow(err) { br.Msg = "公众号不存在" br.IsSendEmail = false } return } if wechatPlatform.FakeId != `` { br.Msg = "公众号已添加成功" br.ErrMsg = "公众号已添加成功" br.IsSendEmail = false return } go cache.AddWechatArticleOpToCache(wechatPlatform.WechatPlatformId, `add`) br.Ret = 200 br.Success = true br.Msg = "刷新成功" } // ArticleList // @Title 我关注的接口 // @Description 我关注的接口 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Param WechatPlatformId query int true "微信公众号id" // @Param KeyWord query string true "搜索关键词" // @Success 200 {object} []*rag.WechatPlatform // @router /wechat_platform/article/list [get] func (c *WechatPlatformController) ArticleList() { br := new(models.BaseResponse).Init() defer func() { c.Data["json"] = br c.ServeJSON() }() sysUser := c.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" return } pageSize, _ := c.GetInt("PageSize") currentIndex, _ := c.GetInt("CurrentIndex") wechatPlatformId, _ := c.GetInt("WechatPlatformId") keyWord := c.GetString("KeyWord") var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = utils.StartIndex(currentIndex, pageSize) var condition string var pars []interface{} if keyWord != "" { condition = fmt.Sprintf(` AND a.%s = ?`, rag.WechatPlatformColumns.Nickname) pars = append(pars, `%`+keyWord+`%`) } if wechatPlatformId > 0 { condition = fmt.Sprintf(` AND a.%s = ?`, rag.WechatArticleColumns.WechatPlatformID) pars = append(pars, wechatPlatformId) } condition = fmt.Sprintf(` AND b.%s = ?`, rag.WechatPlatformColumns.Enabled) pars = append(pars, 1) obj := new(rag.WechatArticle) total, list, err := obj.GetPageListByPlatformCondition(condition, pars, startSize, pageSize) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } viewList := make([]rag.WechatArticleView, 0) if list != nil && len(list) > 0 { viewList = obj.ArticleAndPlatformListToViewList(list) } page := paging.GetPaging(currentIndex, pageSize, total) resp := response.WechatArticleListListResp{ List: viewList, Paging: page, } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // ArticleList // @Title 我关注的接口 // @Description 我关注的接口 // @Param WechatArticleId query int true "文章id" // @Success 200 {object} []*rag.WechatArticle // @router /wechat_platform/article/detail [get] func (c *WechatPlatformController) ArticleDetail() { br := new(models.BaseResponse).Init() defer func() { c.Data["json"] = br c.ServeJSON() }() sysUser := c.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" return } wechatArticleId, _ := c.GetInt("WechatArticleId") if wechatArticleId <= 0 { br.Msg = "请选择文章" br.IsSendEmail = false return } obj := new(rag.WechatArticle) item, err := obj.GetById(wechatArticleId) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } if item.IsDeleted == 1 { br.Msg = "文章已删除" br.IsSendEmail = false return } resp := item.ToView() resp.Content = html.UnescapeString(item.Content) // 获取摘要信息 { abstractObj := rag.WechatArticleAbstract{} abstractItem, err := abstractObj.GetByWechatArticleId(wechatArticleId) if err != nil && !utils.IsErrNoRow(err) { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } resp.Abstract = abstractItem.Content } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // ArticleList // @Title 我关注的接口 // @Description 我关注的接口 // @Param WechatArticleId query int true "文章id" // @Success 200 {object} []*rag.WechatPlatform // @router /wechat_platform/article/del [get] func (c *WechatPlatformController) ArticleDel() { br := new(models.BaseResponse).Init() defer func() { c.Data["json"] = br c.ServeJSON() }() sysUser := c.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" return } wechatArticleId, _ := c.GetInt("WechatArticleId") if wechatArticleId <= 0 { br.Msg = "请选择文章" br.IsSendEmail = false return } obj := new(rag.WechatArticle) item, err := obj.GetById(wechatArticleId) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } if item.IsDeleted == 1 { br.Msg = "文章已删除" br.IsSendEmail = false return } item.IsDeleted = 1 err = item.Update([]string{"is_deleted"}) if err != nil { br.Msg = "删除失败" br.ErrMsg = "删除失败,Err:" + err.Error() return } br.Ret = 200 br.Success = true br.Msg = "删除成功" } //func init() { // //obj := rag.WechatPlatform{} // //item, _ := obj.GetByID(2) // //fmt.Println(llm.BeachAddWechatPlatform(item)) // // obj := rag.WechatArticle{} // //item, _ := obj.GetById(30) // list, _ := obj.GetListByCondition(``, ` `, []interface{}{}, 0, 1) // //llm.ArticleToTmpFile(item.TextContent) // for _, item := range list { // //llm.ArticleToKnowledge(item) // llm.GenerateArticleAbstract(item) // } //}