zwxi 1 tahun lalu
induk
melakukan
3127689ac4

+ 179 - 2
controllers/english_report_approval.go → controllers/english_report.go

@@ -7,6 +7,7 @@ import (
 	"eta/eta_hub/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
+	"sort"
 	"strings"
 	"time"
 )
@@ -50,14 +51,25 @@ func (this *EnglishReportController) List() {
 	keyword = strings.TrimSpace(keyword)
 	if keyword != "" {
 		kw := fmt.Sprint("%", keyword, "%")
-		condition += ` AND title LIKE ? `
-		pars = append(pars, kw)
+		condition += ` AND (title LIKE ? OR author LIKE ? OR admin_real_name LIKE ?) `
+		pars = append(pars, kw, kw, kw)
 	}
 	state, _ := this.GetInt("State")
 	if state > 0 {
 		condition += ` AND state = ? `
 		pars = append(pars, state)
 	}
+	admindId, _ := this.GetInt("AdminId")
+	if admindId > 0 {
+		condition += ` AND admin_id = ? `
+		pars = append(pars, admindId)
+	}
+	classifyId, _ := this.GetInt("ClassifyId")
+	if classifyId > 0 {
+		condition += ` AND (classify_id_first = ? OR classify_id_second = ?) `
+		pars = append(pars, classifyId, classifyId)
+	}
+
 
 	reportOb := new(models.EnglishReport)
 	total, e := reportOb.GetCountByCondition(condition, pars)
@@ -240,3 +252,168 @@ func (this *EnglishReportController) Approve() {
 	br.Ret = 200
 	br.Msg = "审批成功"
 }
+
+// ListClassify
+// @Title 获取分类列表
+// @Description 获取分类列表
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   KeyWord   query   string  true       "检索关键词"
+// @Param   CompanyType   query   string  false       "产品类型,枚举值:'ficc','权益';不传默认返回全部"
+// @Success 200 {object} models.EnglishClassifyListResp
+// @router /classify/list [get]
+func (this *EnglishReportController) ListClassify() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	keyWord := this.GetString("KeyWord")
+
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+
+	startSize = utils.StartIndex(currentIndex, pageSize)
+
+	page := paging.GetPaging(currentIndex, pageSize, 0)
+	resp := new(models.EnglishClassifyListResp)
+
+	// 处理一级分类分页的情况
+	rootList, err := models.GetEnglishClassifyRootId(startSize, pageSize, keyWord)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	var ids []int
+	var rootIds []int
+	rootMap := make(map[int]struct{}, 0)
+	for _, v := range rootList {
+		rootIds = append(rootIds, v.Id)
+		rootMap[v.Id] = struct{}{}
+	}
+	total, err := models.GetEnglishClassifyListCount(keyWord)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	if total == 0 {
+		resp.List = make([]*models.EnglishClassifyList, 0)
+		resp.Paging = page
+
+		br.Data = resp
+		br.Ret = 200
+		br.Msg = "获取成功"
+		return
+	}
+	page = paging.GetPaging(currentIndex, pageSize, total)
+
+	//获取相关的分类ID
+	idList, err := models.GetEnglishClassifyListByRootId(rootIds, keyWord)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	secondListMap := make(map[int][]*models.EnglishClassifyList)
+	thirdListMap := make(map[int][]*models.EnglishClassifyList)
+	var thirdIds []int
+	var sortChildList models.RSChildClassifyList
+	// 三级分类-品种权限
+	permissionMap := make(map[int][]int)
+
+	if len(idList) > 0 {
+		childIdMap := make(map[int]struct{}, 0)
+		for _, v := range idList {
+			if _, ok := childIdMap[v.ParentId]; !ok {
+				ids = append(ids, v.ParentId)
+				childIdMap[v.ParentId] = struct{}{}
+			}
+			if _, ok := childIdMap[v.Id]; !ok {
+				ids = append(ids, v.Id)
+				childIdMap[v.Id] = struct{}{}
+			}
+		}
+		tmpList, err := models.GetEnglishClassifyChildByIds(ids)
+		if err != nil {
+			br.Msg = "获取二级分类失败"
+			br.ErrMsg = "获取二级分类失败,Err:" + err.Error()
+			return
+		}
+		for _, v := range tmpList {
+			if _, ok := rootMap[v.ParentId]; !ok {
+				thirdIds = append(thirdIds, v.Id)
+			}
+		}
+		{
+			classifyIds := thirdIds
+			if len(classifyIds) > 0 {
+				cond := fmt.Sprintf(` AND %s IN (%s)`, models.EnClassifyPermissionColumns.EnClassifyId, utils.GetOrmInReplace(len(classifyIds)))
+				pars := make([]interface{}, 0)
+				pars = append(pars, classifyIds)
+				ob := new(models.EnClassifyPermission)
+				items, e := ob.GetItemsByCondition(cond, pars, []string{}, "")
+				if e != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取客户权限列表失败, Err: " + e.Error()
+					return
+				}
+				for _, v := range items {
+					if permissionMap[v.EnClassifyId] == nil {
+						permissionMap[v.EnClassifyId] = make([]int, 0)
+					}
+					permissionMap[v.EnClassifyId] = append(permissionMap[v.EnClassifyId], v.EnPermissionId)
+				}
+			}
+		}
+		// 处理三级分类
+		for _, v := range tmpList {
+			if _, ok := rootMap[v.ParentId]; !ok {
+				if p, ok1 := permissionMap[v.Id]; ok1 {
+					v.EnPermissions = p
+				}
+				thirdListMap[v.ParentId] = append(thirdListMap[v.ParentId], v)
+			}
+		}
+
+		//处理二级分类
+		for _, v := range tmpList {
+			if _, ok := rootMap[v.ParentId]; ok {
+				if child, ok1 := thirdListMap[v.Id]; ok1 {
+					sortChildList = child
+					sort.Sort(sortChildList)
+					v.Child = sortChildList
+				}
+				secondListMap[v.ParentId] = append(secondListMap[v.ParentId], v)
+			}
+		}
+	}
+
+	//处理一级分类
+	var sortList models.RSClassifyList
+	for _, v := range rootList {
+		if child, ok := secondListMap[v.Id]; ok {
+			sortChildList = child
+			sort.Sort(sortChildList)
+			v.Child = sortChildList
+		}
+		sortList = append(sortList, v)
+	}
+
+	sort.Sort(sortList)
+
+	resp.List = sortList
+	resp.Paging = page
+
+	br.Data = resp
+	br.Ret = 200
+	br.Msg = "获取成功"
+}

+ 12 - 2
controllers/report.go

@@ -49,14 +49,24 @@ func (this *ReportController) List() {
 	keyword = strings.TrimSpace(keyword)
 	if keyword != "" {
 		kw := fmt.Sprint("%", keyword, "%")
-		condition += ` AND (title LIKE ? OR author LIKE ?) `
-		pars = append(pars, kw, kw)
+		condition += ` AND (title LIKE ? OR author LIKE ? OR admin_real_name LIKE ?) `
+		pars = append(pars, kw, kw, kw)
 	}
 	state, _ := this.GetInt("State")
 	if state > 0 {
 		condition += ` AND state = ? `
 		pars = append(pars, state)
 	}
+	admindId, _ := this.GetInt("AdminId")
+	if admindId > 0 {
+		condition += ` AND admin_id = ? `
+		pars = append(pars, admindId)
+	}
+	classifyId, _ := this.GetInt("ClassifyId")
+	if classifyId > 0 {
+		condition += ` AND (classify_id_first = ? OR classify_id_second = ?) `
+		pars = append(pars, classifyId, classifyId)
+	}
 
 	total, err := models.GetReportListCount(condition, pars, "")
 	if err != nil {

+ 13 - 2
controllers/smart_report.go

@@ -49,14 +49,25 @@ func (this *SmartReportController) List() {
 	keyword = strings.TrimSpace(keyword)
 	if keyword != "" {
 		kw := fmt.Sprint("%", keyword, "%")
-		condition += ` AND title LIKE ? `
-		pars = append(pars, kw)
+		condition += ` AND (title LIKE ? OR author LIKE ? OR admin_real_name LIKE ?) `
+		pars = append(pars, kw, kw, kw)
 	}
 	state, _ := this.GetInt("State")
 	if state > 0 {
 		condition += ` AND state = ? `
 		pars = append(pars, state)
 	}
+	admindId, _ := this.GetInt("AdminId")
+	if admindId > 0 {
+		condition += ` AND admin_id = ? `
+		pars = append(pars, admindId)
+	}
+	classifyId, _ := this.GetInt("ClassifyId")
+	if classifyId > 0 {
+		condition += ` AND (classify_id_first = ? OR classify_id_second = ?) `
+		pars = append(pars, classifyId, classifyId)
+	}
+
 
 	resp := new(models.SmartReportListResp)
 	reportOB := new(models.SmartReport)

+ 167 - 0
models/en_classify_permission.go

@@ -0,0 +1,167 @@
+package models
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"eta/eta_hub/utils"
+	"strings"
+	"time"
+)
+
+type EnClassifyPermission struct {
+	EnClassifyPermissionId int       `orm:"column(en_classify_permission_id);pk" description:"英文品种权限ID"`
+	EnClassifyId           int       `description:"英文分类ID"`
+	EnPermissionId         int       `description:"英文品种ID"`
+	CreateTime             time.Time `description:"创建时间"`
+}
+
+var EnClassifyPermissionColumns = struct {
+	EnClassifyPermissionId string
+	EnClassifyId           string
+	EnPermissionId         string
+	CreateTime             string
+}{
+	EnClassifyPermissionId: "en_classify_permission_id",
+	EnClassifyId:           "en_classify_id",
+	EnPermissionId:         "en_permission_id",
+	CreateTime:             "create_time",
+}
+
+func (m *EnClassifyPermission) TableName() string {
+	return "en_classify_permission"
+}
+
+func (m *EnClassifyPermission) Create() (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	id, err := o.Insert(m)
+	if err != nil {
+		return
+	}
+	m.EnClassifyPermissionId = int(id)
+	return
+}
+
+func (m *EnClassifyPermission) Update(cols []string) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	_, err = o.Update(m, cols...)
+	return
+}
+
+func (m *EnClassifyPermission) Del() (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), EnClassifyPermissionColumns.EnClassifyPermissionId)
+	_, err = o.Raw(sql, m.EnClassifyPermissionId).Exec()
+	return
+}
+
+func (m *EnClassifyPermission) GetItemById(id int) (item *EnClassifyPermission, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), EnClassifyPermissionColumns.EnClassifyPermissionId)
+	err = o.Raw(sql, id).QueryRow(&item)
+	return
+}
+
+func (m *EnClassifyPermission) GetItemByCondition(condition string, pars []interface{}) (item *EnClassifyPermission, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 `, m.TableName())
+	sql += condition
+	sql += ` LIMIT 1`
+	err = o.Raw(sql, pars).QueryRow(&item)
+	return
+}
+
+func (m *EnClassifyPermission) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
+	err = o.Raw(sql, pars).QueryRow(&count)
+	return
+}
+
+func (m *EnClassifyPermission) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*EnClassifyPermission, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := `ORDER BY create_time DESC`
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+func (m *EnClassifyPermission) GetPageItemsByCondition(startSize, pageSize int, condition string, pars []interface{}, fieldArr []string, orderRule string) (total int, items []*EnClassifyPermission, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := `ORDER BY create_time DESC`
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
+	totalSql := `SELECT COUNT(1) total FROM (` + sql + `) z`
+	if err = o.Raw(totalSql, pars).QueryRow(&total); err != nil {
+		return
+	}
+	sql += ` LIMIT ?,?`
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+func ClearAndCreateEnClassifyPermissions(classifyId int, permissions []*EnClassifyPermission) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `DELETE FROM en_classify_permission WHERE en_classify_id = ?`
+	if _, e := o.Raw(sql, classifyId).Exec(); e != nil {
+		err = fmt.Errorf("delete err: %s", e.Error())
+		return
+	}
+	if len(permissions) > 0 {
+		if _, e := o.InsertMulti(len(permissions), permissions); e != nil {
+			err = fmt.Errorf("insert multi err: %s", e.Error())
+			return
+		}
+	}
+	return
+}
+
+type EnClassifyPermissionEditReq struct {
+	ClassifyId    int   `description:"分类ID"`
+	EnPermissions []int `description:"权限IDs"`
+}
+
+// GetEnglishReportIdsByEnPermissionIds 根据权限IDs获取报告IDs
+func GetEnglishReportIdsByEnPermissionIds(permissionIds []int) (reportIds []int, err error) {
+	if len(permissionIds) == 0 {
+		return
+	}
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT id FROM english_report WHERE classify_id_second IN (
+				SELECT DISTINCT en_classify_id FROM en_classify_permission WHERE en_permission_id IN (` + utils.GetOrmInReplace(len(permissionIds)) + `)
+			)`
+	_, err = o.Raw(sql, permissionIds).QueryRows(&reportIds)
+	return
+}
+
+// GetEnPermissionIdsByEnglishReportId 获取英文报告权限IDs
+func GetEnPermissionIdsByEnglishReportId(reportId int) (permissionIds []int, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT en_permission_id FROM en_classify_permission WHERE en_classify_id = (
+				SELECT classify_id_second FROM english_report WHERE id = ?
+			)`
+	_, err = o.Raw(sql, reportId).QueryRows(&permissionIds)
+	return
+}
+
+// GetEnPermissionIdsByEnglishVideoId 获取英文视频权限IDs
+func GetEnPermissionIdsByEnglishVideoId(videoId int) (permissionIds []int, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT en_permission_id FROM en_classify_permission WHERE en_classify_id = (
+				SELECT classify_id_second FROM english_video WHERE id = ?
+			)`
+	_, err = o.Raw(sql, videoId).QueryRows(&permissionIds)
+	return
+}

+ 123 - 0
models/english_report.go

@@ -184,3 +184,126 @@ type ElasticEnglishReportDetail struct {
 	ReportCode         string `description:"报告唯一编码"`
 	Overview           string `description:"英文概述部分"`
 }
+
+type EnglishClassifyList struct {
+	Id            int       `orm:"column(id);pk"`
+	ClassifyName  string    `description:"分类名称"`
+	Sort          int       `description:"排序"`
+	ParentId      int       `description:"父级分类id"`
+	RootId        int       `description:"一级分类ID"`
+	CreateTime    string `description:"创建时间"`
+	ModifyTime    string `description:"修改时间"`
+	ClassifyLabel string    `description:"分类标签"`
+	ShowType      int       `json:"-" description:"展示类型:1-列表 2-专栏"`
+	IsShow        int       `json:"-" description:"是否在小程序显示:1-显示 0-隐藏"`
+	//ClassifyType  int       `description:"分类类型:0英文报告,1英文线上路演"`
+	EnPermissions []int `description:"英文权限IDs"`
+	Child         []*EnglishClassifyList
+}
+
+type EnglishClassifyListResp struct {
+	List   []*EnglishClassifyList
+	Paging *paging.PagingItem `description:"分页数据"`
+}
+
+// GetEnglishClassifyRootId 获取一级分类列表
+func GetEnglishClassifyRootId(startSize, pageSize int, keyword string) (items []*EnglishClassifyList, err error) {
+	sql := ``
+	o := orm.NewOrmUsingDB("rddp")
+	if keyword != "" {
+		sql = `SELECT * FROM (
+			                   SELECT * FROM english_classify
+                   WHERE parent_id=0 AND classify_name ?
+                   UNION
+                   SELECT * FROM english_classify
+                   WHERE id IN(SELECT parent_id FROM english_classify
+                   WHERE parent_id>0 AND classify_name LIKE ?)
+                   )AS t
+                   ORDER BY sort ASC,create_time ASC
+                   LIMIT ?,? `
+		_, err = o.Raw(sql, utils.GetLikeKeyword(keyword), utils.GetLikeKeyword(keyword), startSize, pageSize).QueryRows(&items)
+	} else {
+		sql = `SELECT * FROM english_classify WHERE parent_id=0 ORDER BY sort ASC,create_time ASC LIMIT ?,? `
+		_, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
+	}
+	return
+}
+
+func GetEnglishClassifyListCount(keyword string) (count int, err error) {
+	sqlCount := ``
+	o := orm.NewOrmUsingDB("rddp")
+	if keyword != "" {
+		sqlCount = `SELECT  COUNT(1) AS count FROM (
+               SELECT * FROM english_classify
+               WHERE parent_id=0 AND classify_name LIKE ?
+               UNION
+               SELECT * FROM english_classify
+               WHERE id IN(SELECT parent_id FROM english_classify
+               WHERE parent_id>0 AND classify_name LIKE ?)
+               )AS t `
+		err = o.Raw(sqlCount, utils.GetLikeKeyword(keyword), utils.GetLikeKeyword(keyword)).QueryRow(&count)
+	} else {
+		sqlCount = `SELECT COUNT(1) AS count FROM english_classify WHERE parent_id=0`
+		err = o.Raw(sqlCount).QueryRow(&count)
+	}
+
+	return
+}
+
+func GetEnglishClassifyListByRootId(rootIds []int, keyword string) (items []*EnglishClassifyList, err error) {
+	sql := ``
+	pars := make([]interface{}, 0)
+
+	o := orm.NewOrmUsingDB("rddp")
+	if keyword != "" {
+		sql = `SELECT
+	a.*
+FROM
+	english_classify a
+	LEFT JOIN english_classify b ON a.root_id = b.id
+	LEFT JOIN english_classify c ON a.parent_id = c.id
+	WHERE a.parent_id>0 and a.classify_name LIKE ? and a.root_id IN (` + utils.GetOrmInReplace(len(rootIds)) + `)`
+		pars = append(pars, utils.GetLikeKeyword(keyword))
+		pars = append(pars, rootIds)
+		_, err = o.Raw(sql, pars).QueryRows(&items)
+	} else {
+		sql = `SELECT * FROM english_classify WHERE parent_id>0 and root_id IN (` + utils.GetOrmInReplace(len(rootIds)) + `) `
+		_, err = o.Raw(sql, rootIds).QueryRows(&items)
+	}
+	return
+}
+
+type RSChildClassifyList []*EnglishClassifyList
+
+func (m RSChildClassifyList) Len() int {
+	return len(m)
+}
+
+func (m RSChildClassifyList) Less(i, j int) bool {
+	return m[i].Sort < m[j].Sort
+}
+
+func (m RSChildClassifyList) Swap(i, j int) {
+	m[i], m[j] = m[j], m[i]
+}
+
+func GetEnglishClassifyChildByIds(ids []int) (items []*EnglishClassifyList, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT * FROM english_classify WHERE id IN (` + utils.GetOrmInReplace(len(ids)) + `) ORDER BY create_time ASC `
+	_, err = o.Raw(sql, ids).QueryRows(&items)
+	return
+}
+
+type RSClassifyList []*EnglishClassifyList
+
+func (m RSClassifyList) Len() int {
+	return len(m)
+}
+
+func (m RSClassifyList) Less(i, j int) bool {
+	return m[i].Sort < m[j].Sort
+}
+
+func (m RSClassifyList) Swap(i, j int) {
+	m[i], m[j] = m[j], m[i]
+}

+ 9 - 0
routers/commentsRouter.go

@@ -160,6 +160,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_hub/controllers:EnglishReportController"] = append(beego.GlobalControllerRouter["eta/eta_hub/controllers:EnglishReportController"],
+        beego.ControllerComments{
+            Method: "ListClassify",
+            Router: `/classify/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_hub/controllers:EnglishReportController"] = append(beego.GlobalControllerRouter["eta/eta_hub/controllers:EnglishReportController"],
         beego.ControllerComments{
             Method: "Detail",