Quellcode durchsuchen

英文权限列表、邮件推送

hsun vor 1 Jahr
Ursprung
Commit
29556614d6

+ 39 - 5
controllers/english_report/email.go

@@ -238,18 +238,52 @@ func (this *EnglishReportEmailController) Send() {
 		return
 	}
 
-	// 获取收件人列表
-	emailCond := " and enabled = 1 "
-	var emailPars []interface{}
+	// 指定品种的客户
+	sendCompanyIds := make([]int, 0)
+	if len(req.EnPermissions) > 0 {
+		companyIds, e := models.GetEnglishCompanyIdsByEnPermissionIds(req.EnPermissions)
+		if e != nil {
+			br.Msg = "推送失败"
+			br.ErrMsg = "获取指定品种的客户IDs失败, Err: " + e.Error()
+			return
+		}
+		sendCompanyIds = companyIds
+	}
+	// 指定收件人列表
+	sendEmailIds := make([]int, 0)
 	if req.EmailIds != "" {
 		emailIdArr := strings.Split(req.EmailIds, ",")
 		if len(emailIdArr) == 0 {
-			br.Msg = "收件人列表有误"
+			br.Msg = "指定收件人列表有误"
 			br.ErrMsg = fmt.Sprintf("收件人列表为空, 收件人IDs: %s", req.EmailIds)
 			return
 		}
-		emailCond += ` AND id IN (` + req.EmailIds + `)`
+		for _, m := range emailIdArr {
+			v, _ := strconv.Atoi(m)
+			sendEmailIds = append(sendEmailIds, v)
+		}
+	}
+	if len(sendCompanyIds) == 0 && len(sendEmailIds) == 0 {
+		br.Msg = "收件人列表为空(或收件人账号被禁用)"
+		br.ErrMsg = "收件人列表为空, 不可推送"
+		return
+	}
+	emailCond := " AND enabled = 1 AND status <> 3"
+	emailPars := make([]interface{}, 0)
+	if len(sendCompanyIds) > 0 && len(sendEmailIds) > 0 {
+		emailCond += ` AND (company_id IN (` + utils.GetOrmInReplace(len(sendCompanyIds)) + `) OR id IN (` + utils.GetOrmInReplace(len(sendEmailIds)) + `))`
+		emailPars = append(emailPars, sendCompanyIds)
+		emailPars = append(emailPars, sendEmailIds)
 	}
+	if len(sendCompanyIds) > 0 && len(sendEmailIds) == 0 {
+		emailCond += ` AND company_id IN (` + utils.GetOrmInReplace(len(sendCompanyIds)) + `)`
+		emailPars = append(emailPars, sendCompanyIds)
+	}
+	if len(sendCompanyIds) == 0 && len(sendEmailIds) > 0 {
+		emailCond += ` AND id IN (` + utils.GetOrmInReplace(len(sendEmailIds)) + `)`
+		emailPars = append(emailPars, sendEmailIds)
+	}
+
 	emails, e := models.GetEnglishReportEmailList(emailCond, emailPars, "")
 	if e != nil {
 		br.Msg = "获取收件人列表失败"

+ 115 - 0
controllers/english_report/en_permission.go

@@ -0,0 +1,115 @@
+package english_report
+
+import (
+	"fmt"
+	"hongze/hongze_ETA_mobile_api/controllers"
+	"hongze/hongze_ETA_mobile_api/models"
+	"hongze/hongze_ETA_mobile_api/utils"
+	"strings"
+)
+
+// EnPermissionController 英文权限
+type EnPermissionController struct {
+	controllers.BaseAuthController
+}
+
+// List
+// @Title 品种列表
+// @Description 品种列表
+// @Param   Keyword  query  string  false  "关键词"
+// @Param   ReportId  query  int  false  "报告ID-用于邮件推送时过滤掉无权限的品种"
+// @Param   VideoId  query  int  false  "路演视频ID-用于邮件推送时过滤掉无权限的品种"
+// @Success 200 Ret=200 操作成功
+// @router /list [get]
+func (this *EnPermissionController) List() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	keyword := this.GetString("Keyword", "")
+	keyword = strings.TrimSpace(keyword)
+
+	// 禁用指定报告、指定路演无权限的品种
+	reportId, _ := this.GetInt("ReportId", 0)
+	videoId, _ := this.GetInt("VideoId", 0)
+	limitIds := make([]int, 0)
+	if reportId > 0 {
+		ps, e := models.GetEnPermissionIdsByEnglishReportId(reportId)
+		if e != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取报告权限品种失败, Err: " + e.Error()
+			return
+		}
+		limitIds = ps
+	}
+	if videoId > 0 {
+		ps, e := models.GetEnPermissionIdsByEnglishVideoId(videoId)
+		if e != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取视频权限品种失败, Err: " + e.Error()
+			return
+		}
+		limitIds = ps
+	}
+
+	cond := ``
+	pars := make([]interface{}, 0)
+	if keyword != "" {
+		k := fmt.Sprint("%", keyword, "%")
+		cond += fmt.Sprintf(` AND %s LIKE ?`, models.EnPermissionColumns.EnPermissionName)
+		pars = append(pars, k)
+	}
+	list, e := models.GetEnPermissionUnionList(cond, pars)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取品种Union列表失败, Err: " + e.Error()
+		return
+	}
+
+	// 品种树
+	resp := make([]*models.EnPermissionItem, 0)
+	childMap := make(map[int][]*models.EnPermissionItem)
+	for _, v := range list {
+		t := new(models.EnPermissionItem)
+		t.EnPermissionId = v.EnPermissionId
+		t.EnPermissionName = v.EnPermissionName
+		t.CnPermissionName = v.CnPermissionName
+		t.ParentId = v.ParentId
+		t.Sort = v.Sort
+		t.CreateTime = v.CreateTime.Format(utils.FormatDateTime)
+		t.Child = make([]*models.EnPermissionItem, 0)
+		if v.ParentId == 0 {
+			resp = append(resp, t)
+			continue
+		}
+		if v.ParentId > 0 {
+			if childMap[v.ParentId] == nil {
+				childMap[v.ParentId] = make([]*models.EnPermissionItem, 0)
+			}
+			// 无权限则隐藏
+			if (reportId > 0 || videoId > 0) && !utils.InArrayByInt(limitIds, t.EnPermissionId) {
+				continue
+			}
+			childMap[v.ParentId] = append(childMap[v.ParentId], t)
+		}
+	}
+	for _, r := range resp {
+		r.Child = childMap[r.EnPermissionId]
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 167 - 0
models/en_classify_permission.go

@@ -0,0 +1,167 @@
+package models
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_ETA_mobile_api/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
+}

+ 143 - 0
models/en_company_permission.go

@@ -0,0 +1,143 @@
+package models
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_ETA_mobile_api/utils"
+	"strings"
+	"time"
+)
+
+type EnCompanyPermission struct {
+	EnCompanyPermissionId int       `orm:"column(en_company_permission_id);pk" description:"英文品种权限ID"`
+	EnCompanyId           int       `description:"英文客户ID"`
+	EnPermissionId        int       `description:"英文品种ID"`
+	CreateTime            time.Time `description:"创建时间"`
+}
+
+var EnCompanyPermissionColumns = struct {
+	EnCompanyPermissionId string
+	EnCompanyId           string
+	EnPermissionId        string
+	CreateTime            string
+}{
+	EnCompanyPermissionId: "en_company_permission_id",
+	EnCompanyId:           "en_company_id",
+	EnPermissionId:        "en_permission_id",
+	CreateTime:            "create_time",
+}
+
+func (m *EnCompanyPermission) TableName() string {
+	return "en_company_permission"
+}
+
+func (m *EnCompanyPermission) Create() (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	id, err := o.Insert(m)
+	if err != nil {
+		return
+	}
+	m.EnCompanyPermissionId = int(id)
+	return
+}
+
+func (m *EnCompanyPermission) Update(cols []string) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	_, err = o.Update(m, cols...)
+	return
+}
+
+func (m *EnCompanyPermission) Del() (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), EnCompanyPermissionColumns.EnCompanyPermissionId)
+	_, err = o.Raw(sql, m.EnCompanyPermissionId).Exec()
+	return
+}
+
+func (m *EnCompanyPermission) GetItemById(id int) (item *EnCompanyPermission, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), EnCompanyPermissionColumns.EnCompanyPermissionId)
+	err = o.Raw(sql, id).QueryRow(&item)
+	return
+}
+
+func (m *EnCompanyPermission) GetItemByCondition(condition string, pars []interface{}) (item *EnCompanyPermission, 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 *EnCompanyPermission) 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 *EnCompanyPermission) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*EnCompanyPermission, 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 *EnCompanyPermission) GetPageItemsByCondition(startSize, pageSize int, condition string, pars []interface{}, fieldArr []string, orderRule string) (total int, items []*EnCompanyPermission, 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 ClearAndCreateEnCompanyPermissions(companyId int, permissions []*EnCompanyPermission) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `DELETE FROM en_company_permission WHERE en_company_id = ?`
+	if _, e := o.Raw(sql, companyId).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
+}
+
+// GetEnglishCompanyIdsByEnPermissionIds 根据权限IDs获取报告IDs
+func GetEnglishCompanyIdsByEnPermissionIds(permissionIds []int) (companyIds []int, err error) {
+	if len(permissionIds) == 0 {
+		return
+	}
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT DISTINCT a.en_company_id FROM en_company_permission AS a
+			JOIN english_company AS b ON a.en_company_id = b.company_id
+			WHERE
+				a.en_permission_id IN (` + utils.GetOrmInReplace(len(permissionIds)) + `) AND b.status <> 3 AND b.enabled = 1 AND b.is_deleted = 0`
+	_, err = o.Raw(sql, permissionIds).QueryRows(&companyIds)
+	return
+}

+ 174 - 0
models/en_permission.go

@@ -0,0 +1,174 @@
+package models
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"strings"
+	"time"
+)
+
+type EnPermission struct {
+	EnPermissionId   int       `orm:"column(en_permission_id);pk" description:"英文品种权限ID"`
+	EnPermissionName string    `description:"品种权限名称"`
+	CnPermissionName string    `description:"对应的中文权限名称"`
+	ParentId         int       `description:"父级ID"`
+	Sort             int       `description:"排序"`
+	CreateTime       time.Time `description:"创建时间"`
+	ModifyTime       time.Time `description:"修改时间"`
+}
+
+var EnPermissionColumns = struct {
+	EnPermissionId   string
+	EnPermissionName string
+	CnPermissionName string
+	ParentId         string
+	Sort             string
+	CreateTime       string
+	ModifyTime       string
+}{
+	EnPermissionId:   "en_permission_id",
+	EnPermissionName: "en_permission_name",
+	CnPermissionName: "cn_permission_name",
+	ParentId:         "parent_id",
+	Sort:             "sort",
+	CreateTime:       "create_time",
+	ModifyTime:       "modify_time",
+}
+
+func (m *EnPermission) TableName() string {
+	return "en_permission"
+}
+
+func (m *EnPermission) Create() (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	id, err := o.Insert(m)
+	if err != nil {
+		return
+	}
+	m.EnPermissionId = int(id)
+	return
+}
+
+func (m *EnPermission) Update(cols []string) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	_, err = o.Update(m, cols...)
+	return
+}
+
+func (m *EnPermission) Del() (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), EnPermissionColumns.EnPermissionId)
+	_, err = o.Raw(sql, m.EnPermissionId).Exec()
+	return
+}
+
+func (m *EnPermission) GetItemById(id int) (item *EnPermission, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), EnPermissionColumns.EnPermissionId)
+	err = o.Raw(sql, id).QueryRow(&item)
+	return
+}
+
+func (m *EnPermission) GetItemByCondition(condition string, pars []interface{}) (item *EnPermission, 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 *EnPermission) 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 *EnPermission) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*EnPermission, 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 *EnPermission) GetPageItemsByCondition(startSize, pageSize int, condition string, pars []interface{}, fieldArr []string, orderRule string) (total int, items []*EnPermission, 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
+}
+
+type EnPermissionAddReq struct {
+	EnPermissionName string `description:"品种权限名称"`
+	CnPermissionName string `description:"对应的中文权限名称"`
+	ParentId         int    `description:"父级ID"`
+	Sort             int    `description:"排序"`
+}
+
+type EnPermissionEditReq struct {
+	EnPermissionId int `description:"英文品种权限ID"`
+	EnPermissionAddReq
+}
+
+type EnPermissionRemoveReq struct {
+	EnPermissionId int `description:"英文品种权限ID"`
+}
+
+type EnPermissionPageListResp struct {
+	List   []*EnPermissionItem
+	Paging *paging.PagingItem `description:"分页数据"`
+}
+
+type EnPermissionItem struct {
+	EnPermissionId   int    `description:"英文品种权限ID"`
+	EnPermissionName string `description:"品种权限名称"`
+	CnPermissionName string `description:"对应的中文权限名称"`
+	ParentId         int    `description:"父级ID"`
+	Sort             int    `description:"排序"`
+	CreateTime       string `description:"创建时间"`
+	Child            []*EnPermissionItem
+}
+
+func GetEnPermissionUnionList(condition string, pars []interface{}) (items []*EnPermission, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := fmt.Sprintf(`
+		SELECT
+			*
+		FROM
+			(
+				SELECT * FROM en_permission WHERE 1=1 %s
+				UNION
+				SELECT * FROM en_permission WHERE en_permission_id IN (
+					SELECT parent_id FROM en_permission WHERE parent_id > 0 %s
+				)
+			) AS t
+		ORDER BY
+			parent_id ASC,
+			sort ASC,
+			create_time ASC`, condition, condition)
+	_, err = o.Raw(sql, pars, pars).QueryRows(&items)
+	return
+}

+ 4 - 3
models/english_report_email.go

@@ -183,9 +183,10 @@ func DelEnglishReportEmail(id int) (err error) {
 
 // EnglishReportEmailSendReq 群发邮件请求体
 type EnglishReportEmailSendReq struct {
-	ReportId int    `description:"报告ID"`
-	EmailIds string `description:"邮箱IDs, 为空则表示全部"`
-	Theme    string `description:"邮件主题"`
+	ReportId      int    `description:"报告ID"`
+	EmailIds      string `description:"邮箱IDs, 为空则表示全部"`
+	Theme         string `description:"邮件主题"`
+	EnPermissions []int  `description:"品种权限IDs"`
 }
 
 // EnglishReportEmailConf 英文研报邮件配置

+ 9 - 0
routers/commentsRouter.go

@@ -430,6 +430,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/english_report:EnPermissionController"] = append(beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/english_report:EnPermissionController"],
+        beego.ControllerComments{
+            Method: "List",
+            Router: `/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/english_report:EnglishReportController"] = append(beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/english_report:EnglishReportController"],
         beego.ControllerComments{
             Method: "Add",

+ 5 - 0
routers/router.go

@@ -134,6 +134,11 @@ func init() {
 				&controllers.SysAdminController{},
 			),
 		),
+		web.NSNamespace("/en_permission",
+			web.NSInclude(
+				&english_report.EnPermissionController{},
+			),
+		),
 	)
 	web.AddNamespace(ns)
 }