xingzai 3 年之前
父節點
當前提交
504d6e333f
共有 8 個文件被更改,包括 623 次插入1 次删除
  1. 173 0
      controllers/article.go
  2. 49 0
      controllers/chart_permission.go
  3. 246 0
      controllers/tactics.go
  4. 66 0
      models/article.go
  5. 7 0
      models/chart_permission.go
  6. 22 0
      models/report_mapping.go
  7. 55 1
      models/tactics.go
  8. 5 0
      routers/router.go

+ 173 - 0
controllers/article.go

@@ -377,3 +377,176 @@ func (this *ArticleCommonController) Detail() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+
+// @Title 获取报告同步
+// @Description 获取报告详情接口
+// @Param   ArticleIdMd5   query   int  true       "报告ID"
+// @Success 200 {object} models.ArticleDetailResp
+// @router /tongbu [get]
+func (this *ArticleCommonController) Tongbu() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	fmt.Println("同步数据")
+	//indexName := utils.IndexName
+	//endDate := time.Now().AddDate(0, 0, -7).Format(utils.FormatDate)
+	//list, err := models.GetTacticsList(endDate)
+	list, err := models.GetTacticsListAll2()
+	if err != nil {
+		fmt.Println("GetTacticsList Err:", err.Error())
+		return
+	}
+
+	fmt.Println("list len:", len(list))
+
+	for k, v := range list {
+
+		//是否属于纪要库
+		countSummary, err := models.GetPermissionMappingById(v.CategoryId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "参数解析异常!"
+			br.ErrMsg = "参数解析失败,Err:" + err.Error()
+			return
+		}
+		if countSummary > 0 {
+			v.IsSummary = 1
+		}
+		//是否属于报告
+		countReport, err := models.GetReportMappingById(v.CategoryId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "参数解析异常!"
+			br.ErrMsg = "参数解析失败,Err:" + err.Error()
+			return
+		}
+		if countReport > 0 {
+			v.IsReport = 1
+			//是否属于策略 策略自动归类
+			if v.CategoryId == 7  ||v.CategoryId == 11  ||v.CategoryId == 51  ||v.CategoryId == 52   {
+				v.IsClass = 1
+			}
+
+			if v.CategoryId == 64  ||v.CategoryId == 87  ||v.CategoryId == 80  {
+				v.ReportType = 2 //是否属于行业报告
+			}else {
+				v.ReportType = 1 //是否属于产业报告
+			}
+		}
+
+		v.Department = "弘则权益研究"
+		fmt.Println(k, v.ArticleId)
+		hh, _ := time.ParseDuration("8h")
+		//pDate := publishDate.Add(hh)
+		v.PublishDate = v.PublishDate.Add(hh)
+
+		//判断是否已经存在
+		if v.ArticleId < 0 {
+			if err != nil {
+				br.Msg = "参数解析异常!"
+				br.ErrMsg = "参数解析失败,Err:" + err.Error()
+				return
+			}
+		}
+		count, err := models.GetArticleCountById(v.ArticleId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "参数解析异常!"
+			br.ErrMsg = "参数解析失败,Err:" + err.Error()
+			return
+		}
+
+		v.Body = strings.Replace(v.Body, "http://vmp.hzinsights.com", "https://vmp.hzinsights.com", -1)
+		expertNumStr, expertContentStr, interviewDateStr := services.BodyAnalysis(v.Body)
+		if count > 0 {
+			fmt.Println(k, v.ArticleId, "edit")
+			bodyText, _ := services.GetReportContentTextSub(v.Body)
+			updateParams := make(map[string]interface{})
+			updateParams["Title"] = v.Title
+			updateParams["TitleEn"] = v.TitleEn
+			updateParams["UpdateFrequency"] = v.UpdateFrequency
+			updateParams["CreateDate"] = v.CreateDate
+			updateParams["PublishDate"] = v.PublishDate
+			updateParams["Body"] = html.EscapeString(v.Body)
+			updateParams["BodyText"] = bodyText
+			updateParams["Abstract"] = html.EscapeString(v.Abstract)
+			updateParams["CategoryName"] = v.CategoryName
+			updateParams["SubCategoryName"] = v.SubCategoryName
+			updateParams["CategoryId"] = v.CategoryId
+			updateParams["PublishStatus"] = v.PublishStatus
+			updateParams["ExpertBackground"] = expertContentStr
+			updateParams["ExpertNumber"] = expertNumStr
+			updateParams["InterviewDate"] = interviewDateStr
+			updateParams["IsClass"] = v.IsClass
+			updateParams["IsSummary"] = v.IsSummary
+			updateParams["IsReport"] = v.IsReport
+			updateParams["ReportType"] = v.ReportType
+			if v.Department != "弘则权益研究" {
+				v.Department = "弘则权益研究"
+			}
+			updateParams["Department"] = v.Department
+			whereParam := map[string]interface{}{"article_id": v.ArticleId}
+			err = models.UpdateByExpr(models.CygxArticle{}, whereParam, updateParams)
+			if err != nil {
+				fmt.Println("UpdateByExpr Err:" + err.Error())
+			}
+		} else {
+			fmt.Println(k, v.ArticleId, "add")
+			item := new(models.CygxArticle)
+			articleIdInt := v.ArticleId
+			item.ArticleId = articleIdInt
+			item.Title = v.Title
+			item.TitleEn = v.TitleEn
+			item.UpdateFrequency = v.UpdateFrequency
+			item.CreateDate = v.CreateDate
+			item.PublishDate = v.PublishDate.Format(utils.FormatDateTime)
+			item.Body = html.EscapeString(v.Body)
+			item.Abstract = html.EscapeString(v.Abstract)
+			item.CategoryName = v.CategoryName
+			item.SubCategoryName = v.SubCategoryName
+			item.CategoryId = v.CategoryId
+			item.PublishStatus = v.PublishStatus
+			item.ExpertBackground = expertContentStr
+			item.ExpertNumber = expertNumStr
+			item.InterviewDate = interviewDateStr
+			item.Department = v.Department
+			item.ArticleIdMd5 = utils.MD5(strconv.Itoa(articleIdInt))
+			item.IsClass = v.IsClass
+			item.IsSummary = v.IsSummary
+			item.IsReport = v.IsReport
+			item.ReportType = v.ReportType
+			_, err = models.AddCygxArticles(item)
+			if err != nil {
+				fmt.Println("AddCygxArticle Err:", err.Error())
+				br.Msg = "参数解析异常!"
+				br.ErrMsg = "参数解析失败,Err:" + err.Error()
+				return
+			}
+		}
+
+		//content := html.UnescapeString(v.Body)
+		//doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
+		//if err != nil {
+		//	fmt.Println("create doc err:", err.Error())
+		//	br.Msg = "参数解析异常!"
+		//	br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		//	return
+		//}
+		//doc.Find("a").Each(func(i int, a *goquery.Selection) {
+		//	a.Remove()
+		//})
+		//bodyText := doc.Text()
+		//item := new(ElasticTestArticleDetail)
+		//item.ArticleId = v.ArticleId
+		//item.Title = v.Title
+		//item.BodyText = bodyText
+		//item.PublishDate = v.PublishDate.Format(utils.FormatDateTime)
+		//EsAddOrEditData(indexName, strconv.Itoa(v.ArticleId), item)
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "同步成功"
+
+
+}

+ 49 - 0
controllers/chart_permission.go

@@ -30,3 +30,52 @@ func (this *ChartPermissionController) Detail() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+
+// @Title 获取报告所有品种
+// @Description 获取报告所有品种接口
+// @Success 200 {object} models.ChartPermissionResp
+// @router /reportall [get]
+func (this *ChartPermissionController) ReportDetail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	list, err := models.GetChartPermissionReportAll()
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
+		return
+	}
+	resp := new(models.ChartPermissionResp)
+	resp.List = list
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title 获取策略下的所有分类
+// @Description 获取策略下的所有分类接口
+// @Success 200 {object} models.ReportMappingResp
+// @router /strategyAll [get]
+func (this *ChartPermissionController) StrategyDetail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	list, err := models.GetReportMappingStrategyAll()
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
+		return
+	}
+	resp := new(models.ReportMappingResp)
+	resp.List = list
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 246 - 0
controllers/tactics.go

@@ -0,0 +1,246 @@
+package controllers
+
+import (
+	"fmt"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/services"
+	"hongze/hongze_cygx/utils"
+	"html"
+	"rdluck_tools/paging"
+	"strconv"
+	"strings"
+	"time"
+)
+
+type TacticsController struct {
+	BaseAuthController
+}
+
+type TacticsCommonController struct {
+	BaseCommonController
+}
+
+// @Title 策略列表接口
+// @Description 获取策略列表接口
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   CategoryId   query   int  true       "分类ID"
+// @Success 200 {object} models.TacticsListResp
+// @router /list [get]
+func (this *TacticsController) List() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	categoryId, _ := this.GetInt("CategoryId")
+
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = paging.StartIndex(currentIndex, pageSize)
+
+	var condition string
+	var listTacticsSrt string
+	var pars []interface{}
+	var total int
+	resp := new(models.TacticsListResp)
+	page := paging.GetPaging(currentIndex, pageSize, total)
+
+	if categoryId < 1 {
+		listTactics, err := models.GetReportMappingStrategyAll()
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取分类权限信息失败,Err:" + err.Error()
+			return
+		}
+		for _, v := range listTactics {
+			listTacticsSrt = listTacticsSrt + strconv.Itoa(v.CategoryId) + `,`
+		}
+		listTacticsSrt = strings.TrimRight(listTacticsSrt, ",")
+		condition = ` AND category_id IN(` + listTacticsSrt + `)`
+	} else {
+		condition = ` AND category_id IN(` + strconv.Itoa(categoryId) + `)`
+	}
+	total, err := models.GetHomeCount(condition, pars)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.Msg = "获取帖子总数失败,Err:" + err.Error()
+		return
+	}
+	page = paging.GetPaging(currentIndex, pageSize, total)
+	list, err := models.GetReportTacticsList(condition, pars, startSize, pageSize)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.Msg = "获取帖子数据失败,Err:" + err.Error()
+		return
+	}
+	lenList := len(list)
+	for i := 0; i < lenList; i++ {
+		item := list[i]
+		list[i].Body, _ = services.GetReportContentTextSub(item.Body)
+		list[i].Abstract = html.UnescapeString(item.Abstract)
+	}
+	resp.List = list
+	resp.Paging = page
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title 获取报告详情
+// @Description 获取报告详情接口
+// @Param   ArticleId   query   int  true       "报告ID"
+// @Success 200 {object} models.ArticleDetailResp
+// @router /detail [get]
+func (this *TacticsController) Detail() {
+	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
+	}
+	uid := user.UserId
+	articleId, err := this.GetInt("ArticleId")
+	if articleId <= 0 {
+		br.Msg = "参数错误"
+		br.ErrMsg = "参数错误"
+		return
+	}
+	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()
+			return
+		}
+		fmt.Println(detail.Department)
+
+		detail.Body = html.UnescapeString(detail.Body)
+		detail.Abstract = html.UnescapeString(detail.Abstract)
+		if companyPermission == "" {
+			if applyCount > 0 {
+				hasPermission = 5
+			} else {
+				hasPermission = 2
+			}
+			hasFree = 2
+			goto Loop
+		} else {
+			hasFree = 1
+			articlePermission, err := models.GetArticlePermission(detail.SubCategoryName)
+			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:" + err.Error() + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
+				return
+			}
+			for _, p := range articlePermission {
+				if strings.Contains(companyPermission, p.PermissionName) {
+					hasPermission = 1
+					historyRecord := new(models.CygxArticleHistoryRecord)
+					historyRecord.UserId = uid
+					historyRecord.ArticleId = articleId
+					historyRecord.CreateTime = time.Now()
+					historyRecord.Mobile = user.Mobile
+					historyRecord.Email = user.Email
+					historyRecord.CompanyId = user.CompanyId
+					historyRecord.CompanyName = user.CompanyName
+					go models.AddCygxArticleHistoryRecord(historyRecord)
+					break
+				} else { //无该行业权限
+					hasPermission = 3
+				}
+			}
+		}
+		collectCount, err := models.GetArticleCollectCount(uid, articleId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "判断是否已收藏失败,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
+			return
+		}
+
+		if collectCount > 0 {
+			detail.IsCollect = true
+		}
+
+		interviewApplyItem, err := models.GetArticleInterviewApply(uid, articleId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "判断是否已申请访谈失败,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
+			return
+		}
+
+		if interviewApplyItem != nil && interviewApplyItem.InterviewApplyId > 0 {
+			detail.IsInterviewApply = true
+			detail.InterviewApplyStatus = interviewApplyItem.Status
+		}
+		//获取销售手机号
+		sellerItem, err := models.GetSellerByCompanyId(user.CompanyId)
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取销售数据失败,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
+			return
+		}
+		if sellerItem != nil {
+			detail.SellerMobile = sellerItem.Mobile
+			detail.SellerName = sellerItem.RealName
+		}
+	} else { //潜在客户
+		if applyCount > 0 {
+			hasPermission = 5
+		} else {
+			hasPermission = 4
+		}
+	}
+Loop:
+	if hasPermission != 1 {
+		detail.Body = ""
+		detail.BodyText = ""
+	}
+	resp := new(models.ArticleDetailResp)
+	resp.HasPermission = hasPermission
+	resp.HasFree = hasFree
+	resp.Detail = detail
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 66 - 0
models/article.go

@@ -24,6 +24,10 @@ type CygxArticle struct {
 	InterviewDate    string `description:"访谈日期"`
 	Department       string `description:"作者"`
 	ArticleIdMd5     string `description:"ID,md5值"`
+	IsClass          int    `description:"是否归类,1是,0否"`
+	IsSummary        int    `description:"是否是纪要库,1是,0否"`
+	IsReport         int    `description:"是否属于报告,1是,0否"`
+	ReportType       int    `description:"报告类型,1行业报告,2产业报告,0无"`
 }
 
 //新增文章
@@ -171,3 +175,65 @@ func GetArticleCountById(articleId int) (count int, err error) {
 	err = o.Raw(sql, articleId).QueryRow(&count)
 	return
 }
+
+type CygxArticles struct {
+	Id               int    `orm:"column(id);pk"`
+	ArticleId        int    `description:"文章id"`
+	Title            string `description:"标题"`
+	TitleEn          string `description:"英文标题 "`
+	UpdateFrequency  string `description:"更新周期"`
+	CreateDate       string `description:"创建时间"`
+	PublishDate      string `description:"发布时间"`
+	Body             string `description:"内容"`
+	BodyText         string `description:"内容"`
+	Abstract         string `description:"摘要"`
+	CategoryName     string `description:"一级分类"`
+	SubCategoryName  string `description:"二级分类"`
+	PublishStatus    int    `description:"发布状态"`
+	CategoryId       int    `description:"分类id"`
+	ExpertBackground string `description:"专家背景"`
+	ExpertNumber     string `description:"专家编号"`
+	InterviewDate    string `description:"访谈日期"`
+	Department       string `description:"作者"`
+	ArticleIdMd5     string `description:"ID,md5值"`
+	IsClass          int    `description:"是否归类,1是,0否"`
+	IsSummary        int    `description:"是否是纪要库,1是,0否"`
+	IsReport         int    `description:"是否属于报告,1是,0否"`
+	ReportType       int    `description:"报告类型,1行业报告,2产业报告,0无"`
+}
+
+//新增文章
+func AddCygxArticles(item *CygxArticle) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+func GetPermissionMappingById(categoryId int) (count int, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT COUNT(1) AS count FROM cygx_permission_mapping WHERE category_id = ? `
+	err = o.Raw(sql, categoryId).QueryRow(&count)
+	return
+}
+
+func GetReportMappingById(categoryId int) (count int, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT COUNT(1) AS count FROM cygx_report_mapping WHERE category_id = ? `
+	err = o.Raw(sql, categoryId).QueryRow(&count)
+	return
+}
+
+type ReportArticle struct {
+	ArticleId        int    `description:"文章id"`
+	Title            string `description:"标题"`
+	TitleEn          string `description:"英文标题 "`
+	UpdateFrequency  string `description:"更新周期"`
+	CreateDate       string `description:"创建时间"`
+	PublishDate      string `description:"发布时间"`
+	Body             string `description:"内容"`
+	Abstract         string `description:"摘要"`
+	CategoryName     string `description:"一级分类"`
+	SubCategoryName  string `description:"二级分类"`
+	ExpertBackground string `description:"专家背景"`
+	IsRed            bool   `description:"是否标记红点"`
+}

+ 7 - 0
models/chart_permission.go

@@ -26,4 +26,11 @@ func GetCategoryId(chartPermissionId int)(category_id string,err error) {
 			GROUP BY a.chart_permission_id `
 	err=o.Raw(sql,chartPermissionId).QueryRow(&category_id)
 	return
+}
+
+func GetChartPermissionReportAll() (items []*ChartPermission, err error) {
+	o:=orm.NewOrm()
+	sql:=`SELECT * FROM chart_permission WHERE product_id=2 AND is_report=1 ORDER BY sort ASC `
+	_,err=o.Raw(sql).QueryRows(&items)
+	return
 }

+ 22 - 0
models/report_mapping.go

@@ -0,0 +1,22 @@
+package models
+
+import "rdluck_tools/orm"
+
+type ReportMapping struct {
+	CategoryId   int       `description:"分类ID"`
+	SubCategoryName      string    `description:"权限名称"`
+	IsRead bool  `description:"是否标红"`
+}
+
+type ReportMappingResp struct {
+	List []*ReportMapping
+}
+
+//获取策略下面的所有分类
+func GetReportMappingStrategyAll() (items []*ReportMapping, err error) {
+	o:=orm.NewOrm()
+	sql:=`SELECT * FROM cygx_report_mapping WHERE report_type=1 AND chart_permission_id=23 ORDER BY sort ASC `
+	_,err=o.Raw(sql).QueryRows(&items)
+	return
+}
+

+ 55 - 1
models/tactics.go

@@ -2,6 +2,7 @@ package models
 
 import (
 	"rdluck_tools/orm"
+	"rdluck_tools/paging"
 	"time"
 )
 
@@ -51,10 +52,63 @@ func GetTacticsListAll() (list []*Tactics, err error) {
 	return
 }
 
-
 func GetCygxArticleListAll() (list []*Tactics, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * FROM cygx_article `
 	_, err = o.Raw(sql).QueryRows(&list)
 	return
 }
+
+type Tactics2 struct {
+	ArticleId       int       `description:"文章id"`
+	Title           string    `description:"标题"`
+	TitleEn         string    `description:"英文标题"`
+	UpdateFrequency string    `description:"更新周期"`
+	PublishDate     time.Time `description:"发布时间"`
+	PublishStatus   int       `description:"发布状态"`
+	Department      string    `description:"作者"`
+	Body            string    `description:"内容"`
+	Abstract        string    `description:"摘要"`
+	Annotation      string    `description:"注解"`
+	CategoryName    string    `description:"分类"`
+	SubCategoryName string    `description:"子级分类"`
+	CategoryId      int       `description:"分类id"`
+	CreateDate      string    `description:"创建日期"`
+	IsClass         int       `description:"是否归类,1是,0否"`
+	IsSummary       int       `description:"是否是纪要库,1是,0否"`
+	IsReport        int       `description:"是否属于报告,1是,0否"`
+	ReportType      int       `description:"报告类型,1行业报告,2产业报告,0无"`
+}
+
+func GetTacticsListAll2() (list []*Tactics2, err error) {
+	o := orm.NewOrm()
+	o.Using("tactics")
+	sql := `SELECT a.*,b.body,b.abstract,b.annotation,b.article_id,d.category_name,d.sub_category_name,c.category_id
+			FROM article_articleinfo AS a
+			INNER JOIN article_content AS b ON a.id=b.article_id
+			INNER JOIN article_category AS c ON a.id=c.article_id
+			INNER JOIN article_categoryinfo AS d ON c.category_id=d.id
+			WHERE a.publish_status=1 AND d.id IN (7,11,28,32,45,50,51,52,57,62,64,65,66,67,69,71,74,79,80,84,85,86,87,88,89,90,95) 
+            AND a.id NOT IN (3454,3456,3457,3459,2449,2450,2453,2454,2459,2530,2583,2663,2670,2699,2715,2732,2748,2759,2399,2356,2870,3173,2978,2826,3470) `
+	//IN(85,71)
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+type TacticsListResp struct {
+	Paging *paging.PagingItem
+	List   []*ReportArticle
+}
+
+func GetReportTacticsList(condition string, pars []interface{}, startSize, pageSize int) (items []*ReportArticle, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT *
+                 FROM cygx_article AS a
+                WHERE a.publish_status=1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` ORDER BY publish_date DESC LIMIT ?,? `
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}

+ 5 - 0
routers/router.go

@@ -70,6 +70,11 @@ func init() {
 				&controllers.AdviceController{},
 			),
 		),
+		beego.NSNamespace("/tactics",
+			beego.NSInclude(
+				&controllers.TacticsController{},
+			),
+		),
 	)
 	beego.AddNamespace(ns)
 }