package controllers import ( "encoding/json" "github.com/rdlucklib/rdluck_tools/paging" "hongze/hongze_mfyx/models" "hongze/hongze_mfyx/services" "hongze/hongze_mfyx/utils" "strconv" "strings" "time" ) type YanxuanSpecialController struct { BaseAuthController } type YanxuanSpecialNoLoginController struct { BaseAuthMobileController } // @Title 专栏列表 // @Description 专栏列表 // @Param UserId query int true "用户ID" // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Param Status query int false "研选专栏装态" // @Success 200 {object} models.SpecialListResp // @router /list [get] func (this *BaseAuthMobileController) List() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.User if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } userId, _ := this.GetInt("UserId", 0) pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") status, _ := this.GetInt("Status") var startSize int if pageSize <= 0 { pageSize = utils.PageSize50 } if currentIndex <= 0 { currentIndex = 1 } startSize = utils.StartIndex(currentIndex, pageSize) resp := new(models.SpecialListResp) var condition string var pars []interface{} if userId > 0 { condition += ` AND a.user_id = ? ` pars = append(pars, userId) } if status == 2 { condition += ` AND a.status = 2 ` } else { condition += ` AND a.status = 3 ` } total, err := models.GetCygxYanxuanSpecialCount(condition, pars) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败, Err:" + err.Error() return } list, err := models.GetYanxuanSpecialList(sysUser.UserId, condition, pars, startSize, pageSize) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败, Err:" + err.Error() return } var yanxuanSpecialIds []int for _, v := range list { yanxuanSpecialIds = append(yanxuanSpecialIds, v.Id) } yanxuanSpecialPv := services.GetYanxuanSpecialRecordByYanxuanSpecialId(yanxuanSpecialIds) yanxuanSpecialLike := services.GetYanxuanSpecialLikeMap(userId) //专栏本人是否点赞 for _, v := range list { hasImg, err := utils.ArticleHasImgUrl(v.Content) if err != nil { return } if hasImg { v.ContentHasImg = 1 } v.Content = utils.ArticleRemoveImgUrl(v.Content) //v.Content, err = utils.ExtractText(v.Content) //if err != nil { // return //} //v.Content, _ = services.GetReportContentTextSubNew(v.Content) v.Content = services.AnnotationHtml(v.Content) v.Content = strings.Replace(v.Content, " 
 
", "", -1) if v.DocUrl != "" { var docs []models.Doc err := json.Unmarshal([]byte(v.DocUrl), &docs) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } v.Docs = docs } if v.MyCollectNum > 0 { v.IsCollect = 1 } if v.CompanyTags != "" { v.Tags += v.CompanyTags } if v.IndustryTags != "" { if v.Tags != "" { v.Tags += "," } v.Tags += v.IndustryTags } v.Pv = yanxuanSpecialPv[v.Id] //if sysUser.UserId == 0 { // v.Content = utils.InterceptHtmlLength(v.Content, 242) // 截取前80个字 //} v.IsLikeCount = yanxuanSpecialLike[v.Id] } isAuthor, isImproveInformation := services.GetYanxuanSpecialAuthorInfo(sysUser) //用户是否没开通研选专栏以及,专栏信息是否完善 resp.IsAuthor = isAuthor resp.IsImproveInformation = isImproveInformation resp.List = list page := paging.GetPaging(currentIndex, pageSize, total) resp.Paging = page br.Data = resp br.Ret = 200 br.Success = true br.Msg = "获取成功" } // @Title 专栏详情 // @Description 专栏详情 // @Param IsSendWx query int false "是否是通过微信模版进来的 1是,其它否" // @Param InviteShareCode query string false "销售账号邀请码" // @Param Id query int true "详情ID" // @Success 200 {object} models.AddEnglishReportResp // @router /detail [get] func (this *BaseAuthMobileController) Detail() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请登录" br.ErrMsg = "请登录1,SysUser Is Empty" br.Ret = 408 return } specialId, _ := this.GetInt("Id", 0) isSendWx, _ := this.GetInt("IsSendWx", 0) inviteShareCode := this.GetString("InviteShareCode") if specialId <= 0 { br.Msg = "参数错误" br.ErrMsg = "参数错误" return } userId := user.UserId item, tmpErr := models.GetYanxuanSpecialById(specialId, userId) if tmpErr != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败, Err:" + tmpErr.Error() return } if item.MyCollectNum > 0 { item.IsCollect = 1 } //是否点赞 total, err := models.GetCygxYanxuanSpecialSpecialLikeCountByUidYid(user.UserId, specialId) if err != nil { br.Msg = "操作失败!" br.ErrMsg = "操作失败,Err:" + err.Error() return } if total > 0 { item.IsLikeCount = true } item.Pv += item.HzPv // 添加弘则PV //记录分享来源 if inviteShareCode != "" { go services.AddCygxUserAdminShareHistory(user, utils.CYGX_OBJ_YANXUANSPECIAL, item.Title, inviteShareCode, specialId) } if userId == 0 { item.Content = utils.InterceptHtmlLength(item.Content, 150) } var resp models.CygxYanxuanSpecialResp resp.HasPermission = 1 resp.CygxYanxuanSpecialItem = *item if item.DocUrl != "" { var docs []models.Doc err := json.Unmarshal([]byte(item.DocUrl), &docs) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } resp.Docs = docs } if item.CompanyTags != "" { resp.Tags += item.CompanyTags resp.CompanyTags = append(resp.CompanyTags, item.CompanyTags) } if item.IndustryTags != "" { if resp.Tags != "" { resp.Tags += "," } resp.Tags += item.IndustryTags resp.IndustryTags = strings.Split(item.IndustryTags, ",") } //如果状态未审核通过,而且查看的不是本人,不是审核人员,就无法查看详情 var configCode string configCode = utils.TPL_MSG_YAN_XUAN_SPECIAL_APPROVAL cnf, err := models.GetConfigByCode(configCode) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败, Err:" + err.Error() return } if isSendWx == 1 && strings.Contains(cnf.ConfigValue, user.Mobile) { resp.IsShowExamine = true resp.ExamineStatus = item.Status } resp.ExamineStatus = item.Status if item.UserId != user.UserId && item.Status != 3 && !strings.Contains(cnf.ConfigValue, user.Mobile) { resp.CygxYanxuanSpecialItem = *new(models.CygxYanxuanSpecialItem) // 如果内容不可见,就把内容置空 //resp.HasPermission = 2 } //如果在web端有样式或者上传了文件,小程序就禁止编辑修改内容 hasStyle, err := utils.ArticleHasStyle(item.Content) if err != nil { return } hasImg, err := utils.ArticleHasImgUrl(item.Content) if err != nil { return } if hasStyle || strings.Contains(item.DocUrl, "http") || hasImg { resp.ContentHasStyle = true } //校验研选专栏权限,以及无权限的时候的对应状态码 havePower, err := services.GetYanxuanSpecialDetailUserPower(user) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "校验用户权限失败,Err:" + err.Error() return } //看自己的文章时不设权限限制,不需要判断是否有研选订阅权限,都可以看。 if user.UserId == item.UserId { havePower = true } var hasPermission int if havePower { hasPermission = 1 } else { hasPermission, err = services.GetUserDetailPermissionCode(user.UserId, user.CompanyId) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "获取信息失败" br.ErrMsg = "获取信息失败,GetUserDetailPermissionCode Err:" + err.Error() return } } resp.HasPermission = hasPermission //支付信息 resp.IsShowWxPay = utils.IS_SHOW_WX_PAY //是否展示微信支付按钮 resp.IsCompanyApply = services.GetUserApplyRecordCountByCompanyIdPay(user.CompanyId) //获取客户是否有过历史申请记录 resp.IsNeedBusinessCard = services.GetCygxUserBusinessCardCount(user.UserId, user.CompanyId) //是否需要上传名片 resp.GoodsList = services.GetUserGoodsCardList() //日卡月卡商品信息 for _, v := range resp.GoodsList { resp.PopupPriceMsg += v.PopupPriceMsg //价格弹窗信息 } br.Data = resp br.Ret = 200 br.Success = true br.Msg = "获取成功" } // @Title 新增保存专栏作者详情 // @Description 新增保存专栏作者详情 // @Param request body help_doc.AddHelpDocReq true "type json string" // @Success 200 {object} models.AddEnglishReportResp // @router /author/save [post] func (this *YanxuanSpecialController) AuthorSave() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.User if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } var req models.SaveCygxYanxuanSpecialAuthorReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.UserId <= 0 { br.Msg = "用户id有误" return } if req.SpecialName == "" { br.Msg = "请输入专栏名称" return } if req.NickName == "" { br.Msg = "请输入昵称" return } item := models.CygxYanxuanSpecialAuthor{ UserId: req.UserId, SpecialName: req.SpecialName, Introduction: req.Introduction, Label: req.Label, NickName: req.NickName, CreateTime: time.Now(), ModifyTime: time.Now(), BgImg: "", Status: 1, } //if req.Id == 0{ // _, err = models.AddCygxYanxuanSpecialAuthor(&item) // if err != nil { // br.Msg = "新增失败" // br.ErrMsg = "新增失败,Err:" + err.Error() // return // } //} else { // err = models.UpdateYanxuanSpecialAuthor(&item) // if err != nil { // br.Msg = "保存失败" // br.ErrMsg = "保存失败,Err:" + err.Error() // return // } //} err = models.UpdateYanxuanSpecialAuthor(&item) if err != nil { br.Msg = "保存失败" br.ErrMsg = "保存失败,Err:" + err.Error() return } br.Ret = 200 br.Success = true br.Msg = "保存成功" } // @Title 新增保存专栏 // @Description 新增保存专栏 // @Param request body help_doc.AddHelpDocReq true "type json string" // @Success 200 {object} models.AddEnglishReportResp // @router /save [post] func (this *YanxuanSpecialController) Save() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.User if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } var req models.CygxYanxuanSpecialReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.Content == "" && req.DoType == 2 { br.Msg = "请输入内容" return } if req.CompanyTags == "" && req.IndustryTags == "" && req.DoType == 2 { br.Msg = "请至少输入一个标签" return } isApprovalPersonnel := req.IsApprovalPersonnel item := models.CygxYanxuanSpecial{ Id: req.Id, UserId: sysUser.UserId, CreateTime: time.Now(), ModifyTime: time.Now(), PublishTime: time.Now(), Content: req.Content, ImgUrl: req.ImgUrl, DocUrl: req.DocUrl, Title: req.Title, Type: req.Type, CompanyTags: req.CompanyTags, IndustryTags: req.IndustryTags, } if req.DoType == 1 { item.Status = 1 } else { item.Status = 2 } var authorUserId int // 如果是审批人员操作的那么就是修改内容,加审批通过 if isApprovalPersonnel { item.Status = 3 //校验是否属于审核人员 if !services.CheckYxSpecialIsApprovalPersonnel(sysUser.Mobile) { br.Msg = "操作失败" br.ErrMsg = "操作失败,该账号不属于审核人员:" + sysUser.Mobile return } specialItem, err := models.GetYanxuanSpecialItemById(req.Id) if err != nil { br.Msg = "保存失败" br.ErrMsg = "保存失败,Err:" + err.Error() return } item.UserId = specialItem.UserId // 专栏userid还是原有userId authorUserId = specialItem.UserId item.AdminName = sysUser.RealName //审核人员姓名 } specialId := 0 if req.Id == 0 { id, err := models.AddCygxYanxuanSpecial(&item) if err != nil { br.Msg = "新增失败" br.ErrMsg = "新增失败,Err:" + err.Error() return } specialId = int(id) } else { err = models.UpdateYanxuanSpecial(&item) if err != nil { br.Msg = "保存失败" br.ErrMsg = "保存失败,Err:" + err.Error() return } specialId = req.Id } if isApprovalPersonnel { go services.UpdateYanxuanSpecialResourceData(specialId) // 写入首页最新 cygx_resource_data 表 go services.EsAddYanxuanSpecial(specialId) // 写入es 综合搜索 go services.SendWxMsgSpecialFollow(req.Id) //研选专栏有新内容审核通过时,给关注此专栏的客户发送模板消息 go services.SendWxCategoryMsgSpecialFollow(req.Id) //研选专栏有新内容审核通过时,给关注此专栏的客户发送模板消息 go services.SendWxMsgSpecialAuthor(req.Id, 1) //研选专栏审核完成时,给提交人发送模板消息 go services.SendWxCategoryMsgSpecialAuthor(req.Id, 1) //研选专栏审核完成时,给提交人发送类目模板消息 go services.UdpateYanxuanSpecialauthorArticleNum(authorUserId) // 更新作者发布文章的数量 } else { if req.DoType == 2 { go services.SendReviewTemplateMsgAdmin(specialId) go services.SendReviewCategoryTemplateMsgAdmin(specialId) go services.UpdateYanxuanSpecialResourceData(specialId) // 写入首页最新 cygx_resource_data 表 go services.EsAddYanxuanSpecial(specialId) // 写入es 综合搜索 } } br.Ret = 200 br.Success = true br.Msg = "保存成功" } // @Title 专栏作者详情 // @Description 专栏作者详情 // @Param request body help_doc.AddHelpDocReq true "type json string" // @Success 200 {object} models.AddEnglishReportResp // @router /author/detail [get] func (this *YanxuanSpecialController) AuthorDetail() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.User if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } userId, _ := this.GetInt("UserId", 0) if userId == 0 { userId = sysUser.UserId } item, tmpErr := models.GetYanxuanSpecialAuthor(userId, sysUser.UserId, "") if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() { br.Msg = "获取失败" br.ErrMsg = "获取失败, Err:" + tmpErr.Error() return } if item.IsFollow > 0 { item.IsFollow = 1 } br.Data = item br.Ret = 200 br.Success = true br.Msg = "获取成功" } // @Title 审批研选专栏 // @Description 审批研选专栏 // @Param request body help_doc.AddHelpDocReq true "type json string" // @Success 200 {object} models.AddEnglishReportResp // @router /enable [post] func (this *YanxuanSpecialController) Enable() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } var req models.EnableCygxYanxuanSpecialReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.Id <= 0 { br.Msg = "文章id错误" return } if req.Status <= 0 { br.Msg = "参数错误" return } status := 0 if req.Status == 1 { status = 3 } else { status = 4 } detail, err := models.GetYanxuanSpecialItemById(req.Id) if err != nil { br.Msg = "审批失败" br.ErrMsg = "审批失败, Err:" + err.Error() return } if tmpErr := models.EnableYanxuanSpecial(req.Id, status, req.Reason, user.RealName); tmpErr != nil { br.Msg = "审批失败" br.ErrMsg = "审批失败, Err:" + tmpErr.Error() return } if req.Status == 1 { go services.SendWxMsgSpecialFollow(req.Id) go services.SendWxCategoryMsgSpecialFollow(req.Id) } go services.SendWxMsgSpecialAuthor(req.Id, req.Status) go services.SendWxCategoryMsgSpecialAuthor(req.Id, req.Status) go services.UpdateYanxuanSpecialResourceData(req.Id) // 写入首页最新 cygx_resource_data 表 go services.EsAddYanxuanSpecial(req.Id) // 写入es 综合搜索 go services.AddAddCygxYanxuanSpecialApprovalLog(user, req.Id, req.Status, req.Reason) // 添加审核记录日志 go services.UdpateYanxuanSpecialauthorArticleNum(detail.UserId) // 更新作者发布文章的数量 br.Msg = "审批成功" br.Ret = 200 br.Success = true } // @Title 研选专栏收藏 // @Description 研选专栏收藏 // @Param request body help_doc.AddHelpDocReq true "type json string" // @Success 200 {object} models.AddEnglishReportResp // @router /collect [post] func (this *YanxuanSpecialController) Collect() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } var req models.CollectCygxYanxuanSpecialReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.Id <= 0 { br.Msg = "文章id错误" return } if req.Status <= 0 { br.Msg = "参数错误" return } var sellerName string if user.CompanyId > 1 { sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "查询栏目详情失败!" br.ErrMsg = "获取销售信息失败,Err:" + err.Error() return } if sellerItemQy != nil { sellerName = sellerItemQy.RealName } } if req.Status == 1 { item := models.CygxYanxuanSpecialCollect{ UserId: user.UserId, Mobile: user.Mobile, Email: user.Email, CompanyId: user.CompanyId, CompanyName: user.CompanyName, RealName: user.RealName, SellerName: sellerName, CreateTime: time.Now(), ModifyTime: time.Now(), RegisterPlatform: utils.REGISTER_PLATFORM, YanxuanSpecialId: req.Id, } _, err = models.AddCygxYanxuanSpecialCollect(&item) if err != nil { br.Msg = "新增失败" br.ErrMsg = "新增失败,Err:" + err.Error() return } br.Msg = "收藏成功" } else { err = models.DelCygxYanxuanSpecialCollect(user.UserId, req.Id) if err != nil { br.Msg = "删除失败" br.ErrMsg = "删除失败,Err:" + err.Error() return } br.Msg = "取消收藏成功" } go services.UdpateYanxuanSpecialCollect(req.Id) br.Ret = 200 br.Success = true } // @Title 专栏内容中心 // @Description 专栏内容中心 // @Param request body help_doc.AddHelpDocReq true "type json string" // @Success 200 {object} models.AddEnglishReportResp // @router /center [get] func (this *YanxuanSpecialController) Center() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.User if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } // 1:未发布,2:审核中 3:已发布 4:驳回 status, _ := this.GetInt("Status", 0) if status <= 0 { br.Msg = "参数错误" br.ErrMsg = "参数错误" return } var condition string var pars []interface{} condition += ` AND a.user_id = ? ` pars = append(pars, sysUser.UserId) condition += ` AND a.status = ? ` pars = append(pars, status) list, tmpErr := models.GetYanxuanSpecialList(sysUser.UserId, condition, pars, 0, 0) if tmpErr != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败, Err:" + tmpErr.Error() return } for _, v := range list { //如果在web端有样式或者上传了文件,小程序就禁止编辑修改内容 hasStyle, err := utils.ArticleHasStyle(v.Content) if err != nil { return } hasImg, err := utils.ArticleHasImgUrl(v.Content) if err != nil { return } if hasStyle || strings.Contains(v.DocUrl, "http") || hasImg { v.ContentHasStyle = true } } br.Data = list br.Ret = 200 br.Success = true br.Msg = "获取成功" } // @Title 专栏点击记录 // @Description 专栏点击记录 // @Param request body models.AddCygxYanxuanSpecialRecordReq true "type json string" // @router /record [post] func (this *YanxuanSpecialController) Record() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请重新登录" br.Ret = 408 return } var req models.AddCygxYanxuanSpecialRecordReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } specialId := req.SpecialId stopTime := req.StopTime if req.SpecialId <= 0 { br.Msg = "文章不存在" br.ErrMsg = "文章不存在,文章ID错误" return } services.AddSpecialRecord(this.User, specialId, stopTime) br.Ret = 200 br.Success = true br.Msg = "记录成功" } // @Title 研选专栏关注 // @Description 研选专栏关注 // @Param request body help_doc.AddHelpDocReq true "type json string" // @Success 200 {object} models.AddEnglishReportResp // @router /follow [post] func (this *YanxuanSpecialController) Follow() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } var req models.FollowCygxYanxuanSpecialReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.FollowUserId <= 0 { br.Msg = "被关注的用户id" return } if req.Status <= 0 { br.Msg = "参数错误" return } var sellerName string if user.CompanyId > 1 { sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "查询栏目详情失败!" br.ErrMsg = "获取销售信息失败,Err:" + err.Error() return } if sellerItemQy != nil { sellerName = sellerItemQy.RealName } } if req.Status == 1 { followCount, err := models.GetCygxYanxuanSpecialFollowCountByUser(user.UserId, req.FollowUserId) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败, Err:" + err.Error() return } if followCount == 0 && user.UserId > 0 { item := models.CygxYanxuanSpecialFollow{ UserId: user.UserId, FollowUserId: req.FollowUserId, Mobile: user.Mobile, Email: user.Email, CompanyId: user.CompanyId, CompanyName: user.CompanyName, RealName: user.RealName, SellerName: sellerName, CreateTime: time.Now(), ModifyTime: time.Now(), RegisterPlatform: utils.REGISTER_PLATFORM, YanxuanSpecialId: req.SpecialId, } err = models.AddCygxYanxuanSpecialFollow(&item) if err != nil { br.Msg = "新增失败" br.ErrMsg = "新增失败,Err:" + err.Error() return } } br.Msg = "关注成功" } else { err = models.DelCygxYanxuanSpecialFollow(user.UserId, req.FollowUserId) if err != nil { br.Msg = "删除失败" br.ErrMsg = "删除失败,Err:" + err.Error() return } br.Msg = "取消关注成功" } go services.UdpateYanxuanSpecialFansNum(req.FollowUserId) br.Ret = 200 br.Success = true } // @Title 行业标签搜索 // @Description 行业标签搜索 // @Param request body help_doc.AddHelpDocReq true "type json string" // @Success 200 {object} models.AddEnglishReportResp // @router /industrySearch [get] func (this *YanxuanSpecialController) IndustrySearch() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.User if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } keyword := this.GetString("Keyword") list, tmpErr := models.GetYanxuanSpecialIndustry(keyword) if tmpErr != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败, Err:" + tmpErr.Error() return } br.Data = list br.Ret = 200 br.Success = true br.Msg = "获取成功" } // @Title 公司标签搜索 // @Description 公司标签搜索 // @Param request body help_doc.AddHelpDocReq true "type json string" // @Success 200 {object} models.AddEnglishReportResp // @router /companySearch [get] func (this *YanxuanSpecialController) CompanySearch() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.User if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } keyword := this.GetString("Keyword") if keyword == "" { br.Ret = 200 return } list, tmpErr := models.GetYanxuanSpecialCompany(keyword) if tmpErr != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败, Err:" + tmpErr.Error() return } br.Data = list br.Ret = 200 br.Success = true br.Msg = "获取成功" } // @Title 专栏取消发布 // @Description 专栏取消发布 // @Param request body help_doc.AddHelpDocReq true "type json string" // @Success 200 {object} models.AddEnglishReportResp // @router /cancel [post] func (this *YanxuanSpecialController) Cancel() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.User if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } var req models.CancelPublishCygxYanxuanSpecialReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.Id <= 0 { br.Msg = "文章id错误" return } specialItem, err := models.GetYanxuanSpecialItemById(req.Id) if err != nil { br.Msg = "专栏取消发布失败" br.ErrMsg = "专栏取消发布失败,Err:" + err.Error() return } if tmpErr := models.CancelPublishYanxuanSpecial(req.Id); tmpErr != nil { br.Msg = "取消发布失败" br.ErrMsg = "取消发布失败, Err:" + tmpErr.Error() return } go services.UpdateYanxuanSpecialResourceData(req.Id) // 写入首页最新 cygx_resource_data 表 go services.EsAddYanxuanSpecial(req.Id) // 写入es 综合搜索 go services.UdpateYanxuanSpecialauthorArticleNum(specialItem.UserId) // 更新作者发布文章的数量 br.Msg = "取消发布成功" br.Ret = 200 br.Success = true } // @Title 作者列表 // @Description 作者列表 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Success 200 {object} models.AddEnglishReportResp // @router /author/list [get] func (this *YanxuanSpecialController) AuthorList() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.User if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") 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{} condition += ` AND a.nick_name <> '' ` total, err := models.GetCygxYanxuanSpecialAuthorCount(condition, pars) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } condition += ` ORDER BY latest_publish_time DESC` list, tmpErr := models.GetYanxuanSpecialAuthorList(condition, pars, startSize, pageSize) if tmpErr != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败, Err:" + tmpErr.Error() return } var userIds []int for _, v := range list { v.LatestPublishDate = v.LatestPublishTime.Format(utils.FormatDate) + "更新" userIds = append(userIds, v.UserId) } bestNew := services.GetBestNewYanxuanSpecialByUserId(userIds) for _, v := range list { v.YanxuanSpecialCenter = bestNew[v.UserId] } resp := new(models.SpecialAuthorListResp) isAuthor, _ := services.GetYanxuanSpecialAuthorInfo(sysUser) //用户是否没开通研选专栏以及,专栏信息是否完善 resp.MomentsImg = services.GetSpecialAuthorListMomentsImg() //获取作者列表朋友圈分享封面图 resp.IsAuthor = isAuthor page := paging.GetPaging(currentIndex, pageSize, total) resp.List = list resp.Paging = page br.Data = resp br.Ret = 200 br.Success = true br.Msg = "获取成功" } // @Title 更新作者头像 // @Description 更新作者头像 // @Param request body help_doc.AddHelpDocReq true "type json string" // @Success 200 {object} models.AddEnglishReportResp // @router /author/head_img [post] func (this *YanxuanSpecialController) AuthorHeadImg() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.User if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } var req models.SaveCygxYanxuanSpecialAuthoHeadImgrReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.UserId <= 0 { br.Msg = "用户id有误" return } if req.HeadImg == "" { br.Msg = "头像图片错误" return } item := models.CygxYanxuanSpecialAuthor{ UserId: req.UserId, HeadImg: req.HeadImg, } err = models.UpdateYanxuanSpecialAuthorHeadImg(&item) if err != nil { br.Msg = "保存失败" br.ErrMsg = "保存失败,Err:" + err.Error() return } br.Ret = 200 br.Success = true br.Msg = "保存成功" } // @Title 删除专栏 // @Description 删除专栏 // @Param request body help_doc.AddHelpDocReq true "type json string" // @Success 200 {object} models.AddEnglishReportResp // @router /del [post] func (this *YanxuanSpecialController) Delete() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.User if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } var req models.EnableCygxYanxuanSpecialReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.Id <= 0 { br.Msg = "文章id错误" return } if tmpErr := models.DelYanxuanSpecial(req.Id); tmpErr != nil { br.Msg = "删除失败" br.ErrMsg = "删除失败, Err:" + tmpErr.Error() return } br.Msg = "删除成功" br.Ret = 200 br.Success = true } // @Title 专栏文章敏感词检测 // @Description 专栏文章敏感词检测 // @Param request body help_doc.AddHelpDocReq true "type json string" // @Success 200 {object} models.AddEnglishReportResp // @router /check [post] func (this *YanxuanSpecialController) Check() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.User if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } var req models.CygxYanxuanSpecialCheckReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.Content == "" { br.Ret = 200 br.Success = true br.Msg = "校验成功" } itemToken, err := services.WxGetToken() if err != nil { br.Msg = "GetWxAccessToken Err:" + err.Error() return } if itemToken.AccessToken == "" { br.Msg = "accessToken is empty" return } suggest := models.WxCheckContent(itemToken.AccessToken, sysUser.OpenId, req.Content) if suggest == "risky" { br.Msg = "文章内容含有违法违规内容" br.ErrMsg = "文章内容含有违法违规内容" return } if len(req.ImgUrl) > 0 { //for _, imgUrl := range req.ImgUrl { // imgBody, err := http.Get(imgUrl) // if err != nil { // br.Msg = "图片链接有误" // br.ErrMsg = "图片链接有误" // return // } // rnStr := utils.GetRandStringNoSpecialChar(5) // savePath := time.Now().Format(utils.FormatDateTimeUnSpace) + rnStr + ".jpg" // err = file.SaveFile(imgBody, savePath) // if err != nil { // br.Msg = "保存图片错误" // br.ErrMsg = "保存图片错误" // return // } // res, err := weapp.IMGSecCheck(itemToken.AccessToken, savePath) // if err != nil { // // 处理一般错误信息 // br.Msg = "图片内容含有违法违规内容" // br.ErrMsg = "图片内容含有违法违规内容" // return // } // if err := res.GetResponseError(); err != nil { // // 处理微信返回错误信息 // return // } // err = os.RemoveAll(savePath) // if err != nil { // return // } //} } br.Ret = 200 br.Success = true br.Msg = "校验成功" } // @Title 上传文章阅读时间 // @Description 上传文章阅读时间接口 // @Param request body models.AddStopTimeRep true "type json string" // @Success 200 {object} models.ArticleDetailResp // @router /addStopTimedel [post] func (this *YanxuanSpecialController) AddStopTime() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请登录" br.ErrMsg = "请登录,用户信息为空" br.Ret = 408 return } var req models.AddStopTimeRep err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } uid := user.UserId articleId := req.ArticleId stopTime := req.StopTime outType := req.OutType source := req.Source if articleId <= 0 { br.Msg = "参数错误" br.ErrMsg = "参数错误" return } if stopTime == 0 { stopTime = 1 } if outType != 2 { outType = 1 } if source != "PC" { source = "MOBILE" } detail := new(models.ArticleDetail) hasPermission := 0 hasFree := 0 //判断是否已经申请过 applyCount, err := models.GetApplyRecordCount(uid) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "获取信息失败" br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error() return } //`description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,4:潜在客户,未提交过申请,5:潜在客户,已提交过申请"` if user.CompanyId > 1 { companyPermission, err := models.GetCompanyPermission(user.CompanyId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "判断是否已申请访谈失败,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId) return } detail, err = models.GetArticleDetailById(articleId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取文章信息失败,Err:" + err.Error() + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId) return } if companyPermission == "" { if applyCount > 0 { hasPermission = 5 } else { hasPermission = 2 } hasFree = 2 goto Loop } else { hasFree = 1 var articlePermissionPermissionName string if detail.CategoryId > 0 { articlePermission, err := models.GetArticlePermission(detail.CategoryId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取报告权限失败,Err:" + err.Error() + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId) return } if articlePermission == nil { br.Msg = "获取信息失败" br.ErrMsg = "报告权限不存在,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId) return } articlePermissionPermissionName = articlePermission.PermissionName } else { articlePermissionPermissionName = detail.CategoryName } var hasPersion bool slice := strings.Split(articlePermissionPermissionName, ",") for _, v := range slice { if strings.Contains(companyPermission, v) { hasPersion = true } } if hasPersion { go services.ArticleHistoryStopTime(articleId, stopTime, outType, user) } else { //无该行业权限 hasPermission = 3 } } } else { //潜在客户 if applyCount > 0 { hasPermission = 5 } else { hasPermission = 4 } } Loop: resp := new(models.ArticleDetailAddStopTimeRep) resp.HasPermission = hasPermission resp.HasFree = hasFree br.Ret = 200 br.Success = true br.Msg = "操作成功" br.Data = resp } // @Title 获取专栏朋友圈封面详情 // @Description 获取专栏朋友圈封面详情接口 // @Param UserId query int false "用户ID,等于0列表详情,大于0作者详情" // @Success 200 {object} models.AddEnglishReportResp // @router /moments_img [get] func (this *YanxuanSpecialController) MomentsImg() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.User if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } type imgUrlResp struct { MomentsImg string // 分享图片 } var imgUrl string userId, _ := this.GetInt("UserId", 0) if userId == 0 { imgUrl = services.GetYanxuanSpecialAuthoListMomentsImg() } else { imgUrl = services.GetYanxuanSpecialAuthoMomentsImg(userId) } resp := new(imgUrlResp) resp.MomentsImg = imgUrl br.Data = resp br.Ret = 200 br.Success = true br.Msg = "获取成功" } // @Title 专栏文章点赞/取消点赞 // @Description 专栏文章点赞/取消点赞接口 // @Param request body models.TopCygxYanxuanSpecialMessageReq true "type json string" // @Success Ret=200 {object} // @router /like [post] func (this *YanxuanSpecialController) Like() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请登录" br.ErrMsg = "请登录,用户信息为空" br.Ret = 408 return } var req models.LikeCygxYanxuanSpecialSpecialLikeReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } yanxuanSpecialId := req.YanxuanSpecialId doType := req.DoType userId := user.UserId // 研选专栏 yanxuanSpecialBySpeciaDetail, err := models.GetYanxuanSpecialBySpecialId(yanxuanSpecialId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取信息失败,Err:" + err.Error() return } total, err := models.GetCygxYanxuanSpecialSpecialLikeCountByUidYid(userId, yanxuanSpecialId) if err != nil { br.Msg = "操作失败!" br.ErrMsg = "操作失败,Err:" + err.Error() return } var msgContent string if doType == 1 { if total == 0 { item := new(models.CygxYanxuanSpecialSpecialLike) item.UserId = userId item.Mobile = user.Mobile item.Email = user.Email item.CompanyId = user.CompanyId item.CompanyName = user.CompanyName item.RealName = user.RealName item.YanxuanSpecialId = yanxuanSpecialId item.CreateTime = time.Now() item.ModifyTime = time.Now() item.RegisterPlatform = utils.REGISTER_PLATFORM err = models.AddCygxCygxYanxuanSpecialSpecialLike(item, yanxuanSpecialBySpeciaDetail.UserId) if err != nil { br.Msg = "点赞失败!" br.ErrMsg = "点赞失败,Err:" + err.Error() return } } msgContent = "已点赞" } else { if total > 0 { err = models.DeleteCygxYanxuanSpecialSpecialLike(userId, yanxuanSpecialId, yanxuanSpecialBySpeciaDetail.UserId) if err != nil { br.Msg = "点赞失败!" br.ErrMsg = "点赞失败,Err:" + err.Error() return } } msgContent = "已取消点赞" } br.Ret = 200 br.Success = true br.Msg = msgContent } // @Title 作者粉丝列表 // @Description 作者粉丝列表接口 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Success 200 {object} models.AddEnglishReportResp // @router /author/fans_list [get] func (this *YanxuanSpecialController) FanList() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请登录" br.ErrMsg = "请登录,用户信息为空" br.Ret = 408 return } pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = utils.StartIndex(currentIndex, pageSize) resp := new(models.CygxYanxuanSpecialFollowListResp) var condition string var pars []interface{} condition = " AND follow_user_id = ? " pars = append(pars, user.UserId) //作者粉丝数量 total, err := models.GetCygxYanxuanSpecialFollowCount(condition, pars) if err != nil { br.Msg = "获取信息失败!" br.ErrMsg = "获取信息失败,GetCygxYanxuanSpecialFollowCountErr:" + err.Error() return } condition += " ORDER BY cygx_yanxuan_special_follow_id DESC " list, err := models.GetCygxYanxuanSpecialFollowList(condition, pars, startSize, pageSize) if err != nil { br.Msg = "获取信息失败!" br.ErrMsg = "获取信息失败,GetCygxYanxuanSpecialFollowList:" + err.Error() return } if len(list) > 0 { var userIds []int for _, v := range list { userIds = append(userIds, v.UserId) } //用户头像 listUser, err := models.GetWxUserListByUserIdsArr(userIds) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败, Err:" + err.Error() return } mapUserImg := make(map[int]string) for _, v := range listUser { if v.Headimgurl != "" { mapUserImg[v.UserId] = v.Headimgurl } else { mapUserImg[v.UserId] = utils.DefaultHeadimgurl } } for _, v := range list { item := new(models.CygxYanxuanSpecialFollowResp) if v.CompanyName != "" { item.CompanyName = v.CompanyName } else { item.CompanyName = "潜在客户" } if v.RealName != "" { item.RealName = v.RealName } else { item.RealName = "--" } item.CreateTime = v.CreateTime.Format(utils.FormatDateTime) item.Headimgurl = mapUserImg[v.UserId] resp.List = append(resp.List, item) } } else { resp.List = make([]*models.CygxYanxuanSpecialFollowResp, 0) } page := paging.GetPaging(currentIndex, pageSize, total) resp.Paging = page br.Data = resp br.Ret = 200 br.Success = true br.Msg = "获取成功" }