hsun 1 rok pred
rodič
commit
e249a31b12
3 zmenil súbory, kde vykonal 164 pridanie a 198 odobranie
  1. 92 128
      controllers/business_conf.go
  2. 56 54
      models/business_conf.go
  3. 16 16
      services/video.go

+ 92 - 128
controllers/business_conf.go

@@ -3,8 +3,8 @@ package controllers
 import (
 	"encoding/json"
 	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/utils"
 	"html"
+	"strconv"
 	"strings"
 	"time"
 )
@@ -17,7 +17,7 @@ type BusinessConfController struct {
 // Save
 // @Title 保存配置
 // @Description 保存配置
-// @Param	request	body models.BusinessConfSaveReq true "type json string"
+// @Param	request	body map[string]interface{} true "type json string"
 // @Success 200 Ret=200 操作成功
 // @router /save [post]
 func (this *BusinessConfController) Save() {
@@ -36,122 +36,106 @@ func (this *BusinessConfController) Save() {
 		br.Ret = 408
 		return
 	}
-
-	// 参数校验
-	var req models.BusinessConfSaveReq
+	var req map[string]interface{}
 	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + e.Error()
 		return
 	}
-	req.Disclaimer = strings.TrimSpace(req.Disclaimer)
-	if req.Disclaimer == "" {
-		br.Msg = "请输入免责声明"
-		return
-	}
-	req.CompanyName = strings.TrimSpace(req.CompanyName)
-	if req.CompanyName == "" {
-		br.Msg = "请输入公司名称"
-		return
-	}
-	if len(req.CnPptCoverImgs) == 0 {
-		br.Msg = "请上传中文PPT封面图"
-		return
-	}
-	if len(req.CnPptCoverImgs) > 3 {
-		br.Msg = "封面图最多上传3张"
-		return
-	}
-	if req.CnPptBackgroundImg == "" {
-		br.Msg = "请上传中文PPT背景图"
-		return
-	}
-	if req.CnPptBackgroundImg == "" {
-		br.Msg = "请上传中文PPT封底图"
-		return
-	}
-	if len(req.EnPptCoverImgs) == 0 {
-		br.Msg = "请上传英文PPT封面图"
-		return
-	}
-	if len(req.EnPptCoverImgs) > 3 {
-		br.Msg = "封面图最多上传3张"
-		return
-	}
-	if req.EnPptBackgroundImg == "" {
-		br.Msg = "请上传英文PPT背景图"
-		return
-	}
-	if req.EnPptBottomImg == "" {
-		br.Msg = "请上传英文PPT封底图"
-		return
-	}
-	if req.UseXf == 1 {
-		req.XfAppid = strings.TrimSpace(req.XfAppid)
-		if req.XfAppid == "" {
-			br.Msg = "请输入科大讯飞APPID"
-			return
-		}
-		req.XfApiKey = strings.TrimSpace(req.XfApiKey)
-		if req.XfApiKey == "" {
-			br.Msg = "请输入科大讯飞APIKey"
-			return
-		}
-		req.XfApiSecret = strings.TrimSpace(req.XfApiSecret)
-		if req.XfApiSecret == "" {
-			br.Msg = "请输入科大讯飞APISecret"
-			return
-		}
-		req.XfVcn = strings.TrimSpace(req.XfVcn)
-		if req.XfVcn == "" {
-			br.Msg = "请输入科大讯飞Vcn"
-			return
-		}
-	}
 
-	item, e := models.GetBusinessConf()
-	if e != nil && e.Error() != utils.ErrNoRow() {
+	// 获取配置信息
+	confOb := new(models.BusinessConf)
+	list, e := confOb.GetItemsByCondition("", make([]interface{}, 0), []string{}, "")
+	if e != nil {
 		br.Msg = "保存失败"
-		br.ErrMsg = "获取商家配置失败, Err: " + e.Error()
+		br.ErrMsg = "获取配置列表失败, Err: " + e.Error()
 		return
 	}
-
-	isUpdate := false
-	if item != nil {
-		isUpdate = true
-	} else {
-		item = new(models.BusinessConf)
+	confMap := make(map[string]*models.BusinessConf)
+	for _, c := range list {
+		confMap[c.ConfKey] = c
 	}
-	item.CompanyName = req.CompanyName
-	item.CompanyWatermark = req.CompanyWatermark
-	item.WatermarkChart = req.WatermarkChart
-	item.CnPptCoverImgs = strings.Join(req.CnPptCoverImgs, ",")
-	item.CnPptBackgroundImg = req.CnPptBackgroundImg
-	item.CnPptBottomImg = req.CnPptBottomImg
-	item.Disclaimer = html.EscapeString(req.Disclaimer)
-	item.EnPptCoverImgs = strings.Join(req.EnPptCoverImgs, ",")
-	item.EnPptBackgroundImg = req.EnPptBackgroundImg
-	item.EnPptBottomImg = req.EnPptBottomImg
-	item.UseXf = req.UseXf
-	item.XfAppid = req.XfAppid
-	item.XfApiKey = req.XfApiKey
-	item.XfApiSecret = req.XfApiSecret
-	item.XfVcn = req.XfVcn
 
-	if isUpdate {
-		cols := []string{
-			"CompanyName", "CompanyWatermark", "WatermarkChart", "CnPptCoverImgs", "CnPptBackgroundImg", "CnPptBottomImg", "Disclaimer",
-			"EnPptCoverImgs", "EnPptBackgroundImg", "EnPptBottomImg", "UseXf", "XfAppid", "XfApiKey", "XfApiSecret", "XfVcn",
+	// 根据配置类型取值
+	updates := make([]models.BusinessConfUpdate, 0)
+	for k, v := range req {
+		// 过滤掉表中没有的key
+		conf := confMap[k]
+		if conf == nil {
+			continue
 		}
-		if e = item.Update(cols); e != nil {
-			br.Msg = "保存失败"
-			br.ErrMsg = "更新商家配置失败, Err: " + e.Error()
-			return
+
+		switch conf.ValType {
+		case 1: // 字符串
+			str, ok := v.(string)
+			if !ok {
+				continue
+			}
+			str = strings.TrimSpace(str)
+			if conf.Necessary == 1 && str == "" {
+				br.Msg = conf.Remark + "不可为空"
+				return
+			}
+			updates = append(updates, models.BusinessConfUpdate{
+				ConfKey: k,
+				ConfVal: str,
+			})
+		case 2: // 数值
+			num, ok := v.(float64)
+			if !ok {
+				continue
+			}
+			if conf.Necessary == 1 && num <= 0 {
+				br.Msg = conf.Remark + "不可为空"
+				return
+			}
+			val := strconv.FormatFloat(num, 'f', 0, 64)
+			updates = append(updates, models.BusinessConfUpdate{
+				ConfKey: k,
+				ConfVal: val,
+			})
+		case 3: // 字符串数组
+			arr, ok := v.([]interface{})
+			if !ok {
+				continue
+			}
+			if conf.Necessary == 1 && len(arr) == 0 {
+				br.Msg = conf.Remark + "不可为空"
+				return
+			}
+			strArr := make([]string, 0)
+			for _, a := range arr {
+				if s, ok2 := a.(string); ok2 {
+					strArr = append(strArr, s)
+				}
+			}
+			val := strings.Join(strArr, ",")
+			updates = append(updates, models.BusinessConfUpdate{
+				ConfKey: k,
+				ConfVal: val,
+			})
+		case 4: // 富文本
+			content, ok := v.(string)
+			if !ok {
+				continue
+			}
+			content = strings.TrimSpace(content)
+			if conf.Necessary == 1 && content == "" {
+				br.Msg = conf.Remark + "不可为空"
+				return
+			}
+			content = html.EscapeString(content)
+			updates = append(updates, models.BusinessConfUpdate{
+				ConfKey: k,
+				ConfVal: content,
+			})
 		}
-	} else {
-		if e = item.Create(); e != nil {
+	}
+
+	if len(updates) > 0 {
+		if e = models.UpdateBusinessConfMulti(updates); e != nil {
 			br.Msg = "保存失败"
-			br.ErrMsg = "新增商家配置失败, Err: " + e.Error()
+			br.ErrMsg = "保存商家配置失败, Err: " + e.Error()
 			return
 		}
 	}
@@ -197,34 +181,14 @@ func (this *BusinessConfController) Fetch() {
 		return
 	}
 
-	item, e := models.GetBusinessConf()
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		br.Msg = "保存失败"
+	list, e := models.GetBusinessConf()
+	if e != nil {
+		br.Msg = "获取失败"
 		br.ErrMsg = "获取商家配置失败, Err: " + e.Error()
 		return
 	}
-	res := new(models.BusinessConfItem)
-	res.CnPptCoverImgs = make([]string, 0)
-	res.EnPptCoverImgs = make([]string, 0)
-	if item != nil {
-		res.CompanyName = item.CompanyName
-		res.CompanyWatermark = item.CompanyWatermark
-		res.WatermarkChart = item.WatermarkChart
-		res.CnPptCoverImgs = strings.Split(item.CnPptCoverImgs, ",")
-		res.CnPptBackgroundImg = item.CnPptBackgroundImg
-		res.CnPptBottomImg = item.CnPptBottomImg
-		res.Disclaimer = html.UnescapeString(item.Disclaimer)
-		res.EnPptCoverImgs = strings.Split(item.EnPptCoverImgs, ",")
-		res.EnPptBackgroundImg = item.EnPptBackgroundImg
-		res.EnPptBottomImg = item.EnPptBottomImg
-		res.UseXf = item.UseXf
-		res.XfAppid = item.XfAppid
-		res.XfApiKey = item.XfApiKey
-		res.XfApiSecret = item.XfApiSecret
-		res.XfVcn = item.XfVcn
-	}
 
-	br.Data = res
+	br.Data = list
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"

+ 56 - 54
models/business_conf.go

@@ -3,27 +3,28 @@ package models
 import (
 	"fmt"
 	"github.com/beego/beego/v2/client/orm"
+	"html"
 	"strings"
+	"time"
+)
+
+const (
+	BusinessConfUseXf       = "UseXf"
+	BusinessConfXfAppid     = "XfAppid"
+	BusinessConfXfApiKey    = "XfApiKey"
+	BusinessConfXfApiSecret = "XfApiSecret"
+	BusinessConfXfVcn       = "XfVcn"
 )
 
 // BusinessConf 商户配置表
 type BusinessConf struct {
-	Id                 int    `orm:"column(id);pk"`
-	CompanyName        string `description:"公司名称"`
-	CompanyWatermark   string `description:"公司水印"`
-	WatermarkChart     int    `description:"是否在研报图表使用水印"`
-	CnPptCoverImgs     string `description:"中文PPT封面图(多图)"`
-	CnPptBackgroundImg string `description:"中文PPT背景图"`
-	CnPptBottomImg     string `description:"中文PPT封底图"`
-	Disclaimer         string `description:"免责声明"`
-	EnPptCoverImgs     string `description:"英文PPT封面图(多图)"`
-	EnPptBackgroundImg string `description:"英文PPT背景图"`
-	EnPptBottomImg     string `description:"英文PPT封底图"`
-	UseXf              int    `description:"是否使用科大讯飞:0-否;1-是"`
-	XfAppid            string `description:"科大讯飞Appid"`
-	XfApiKey           string `description:"科大讯飞ApiKey"`
-	XfApiSecret        string `description:"科大讯飞ApiSecret"`
-	XfVcn              string `description:"科大讯飞Vcn"`
+	Id         int    `orm:"column(id);pk"`
+	ConfKey    string `description:"配置Key"`
+	ConfVal    string `description:"配置值"`
+	ValType    int    `description:"1-字符串;2-数值;3-字符串数组;4-富文本;"`
+	Necessary  int    `description:"是否必填:0-否;1-是"`
+	Remark     string `description:"备注"`
+	CreateTime time.Time
 }
 
 func (m *BusinessConf) TableName() string {
@@ -117,48 +118,49 @@ func (m *BusinessConf) GetPageItemsByCondition(condition string, pars []interfac
 	return
 }
 
-// BusinessConfSaveReq 保存配置请求体
-type BusinessConfSaveReq struct {
-	CompanyName        string   `description:"公司名称"`
-	CompanyWatermark   string   `description:"公司水印"`
-	WatermarkChart     int      `description:"是否在研报图表使用水印"`
-	CnPptCoverImgs     []string `description:"中文PPT封面图(多图)"`
-	CnPptBackgroundImg string   `description:"中文PPT背景图"`
-	CnPptBottomImg     string   `description:"中文PPT封底图"`
-	Disclaimer         string   `description:"免责声明"`
-	EnPptCoverImgs     []string `description:"英文PPT封面图(多图)"`
-	EnPptBackgroundImg string   `description:"英文PPT背景图"`
-	EnPptBottomImg     string   `description:"英文PPT封底图"`
-	UseXf              int      `description:"是否使用科大讯飞:0-否;1-是"`
-	XfAppid            string   `description:"科大讯飞Appid"`
-	XfApiKey           string   `description:"科大讯飞ApiKey"`
-	XfApiSecret        string   `description:"科大讯飞ApiSecret"`
-	XfVcn              string   `description:"科大讯飞Vcn"`
+// GetBusinessConf 获取商家配置
+func GetBusinessConf() (list map[string]string, err error) {
+	list = make(map[string]string)
+
+	var items []*BusinessConf
+	o := orm.NewOrm()
+	sql := `SELECT * FROM business_conf`
+	_, err = o.Raw(sql).QueryRows(&items)
+	if err != nil {
+		return
+	}
+
+	for _, v := range items {
+		if v.ValType == 4 {
+			list[v.ConfKey] = html.UnescapeString(v.ConfVal)
+			continue
+		}
+		list[v.ConfKey] = v.ConfVal
+	}
+	return
 }
 
-// BusinessConfItem 商家配置信息
-type BusinessConfItem struct {
-	CompanyName        string   `description:"公司名称"`
-	CompanyWatermark   string   `description:"公司水印"`
-	WatermarkChart     int      `description:"是否在研报图表使用水印"`
-	CnPptCoverImgs     []string `description:"中文PPT封面图(多图)"`
-	CnPptBackgroundImg string   `description:"中文PPT背景图"`
-	CnPptBottomImg     string   `description:"中文PPT封底图"`
-	Disclaimer         string   `description:"免责声明"`
-	EnPptCoverImgs     []string `description:"英文PPT封面图(多图)"`
-	EnPptBackgroundImg string   `description:"英文PPT背景图"`
-	EnPptBottomImg     string   `description:"英文PPT封底图"`
-	UseXf              int      `description:"是否使用科大讯飞:0-否;1-是"`
-	XfAppid            string   `description:"科大讯飞Appid"`
-	XfApiKey           string   `description:"科大讯飞ApiKey"`
-	XfApiSecret        string   `description:"科大讯飞ApiSecret"`
-	XfVcn              string   `description:"科大讯飞Vcn"`
+// BusinessConfUpdate 更新配置
+type BusinessConfUpdate struct {
+	ConfKey string
+	ConfVal string
 }
 
-// GetBusinessConf 获取商家配置
-func GetBusinessConf() (item *BusinessConf, err error) {
+// UpdateBusinessConfMulti 批量修改配置
+func UpdateBusinessConfMulti(items []BusinessConfUpdate) (err error) {
 	o := orm.NewOrm()
-	sql := `SELECT * FROM business_conf LIMIT 1`
-	err = o.Raw(sql).QueryRow(&item)
+	p, err := o.Raw("UPDATE business_conf SET conf_val = ? WHERE conf_key = ?").Prepare()
+	if err != nil {
+		return
+	}
+	defer func() {
+		_ = p.Close()
+	}()
+	for _, v := range items {
+		_, err = p.Exec(v.ConfVal, v.ConfKey)
+		if err != nil {
+			return
+		}
+	}
 	return
 }

+ 16 - 16
services/video.go

@@ -32,20 +32,20 @@ func CreateVideo(report *models.ReportDetail) (err error) {
 
 	// 获取基础配置, 若未配置则直接返回
 	conf, e := models.GetBusinessConf()
-	if e != nil && e.Error() != utils.ErrNoRow() {
+	if e != nil {
 		err = fmt.Errorf("获取基础配置失败, Err: " + e.Error())
 		return
 	}
-	if conf.UseXf == 0 {
+	if conf[models.BusinessConfUseXf] != "true" {
 		return
 	}
-	if conf.XfAppid == "" || conf.XfApiKey == "" || conf.XfApiSecret == "" || conf.XfVcn == "" {
+	if conf[models.BusinessConfXfAppid] == "" || conf[models.BusinessConfXfApiKey] == "" || conf[models.BusinessConfXfApiSecret] == "" || conf[models.BusinessConfXfVcn] == "" {
 		return
 	}
 	var xfReq XfParams
-	xfReq.XfAPPID = conf.XfAppid
-	xfReq.XfAPIKey = conf.XfApiKey
-	xfReq.XfAPISecret = conf.XfApiSecret
+	xfReq.XfAPPID = conf[models.BusinessConfXfAppid]
+	xfReq.XfAPIKey = conf[models.BusinessConfXfApiKey]
+	xfReq.XfAPISecret = conf[models.BusinessConfXfApiSecret]
 
 	ct, err := time.Parse(utils.FormatDateTime, report.CreateTime)
 	createTime := ct.Format("0102")
@@ -61,11 +61,11 @@ func CreateVideo(report *models.ReportDetail) (err error) {
 	}
 
 	param := new(models.XfSendParam)
-	param.Common.AppId = conf.XfAppid
+	param.Common.AppId = conf[models.BusinessConfXfAppid]
 	param.Business.Aue = "lame"
 	param.Business.Sfl = 1
 	param.Business.Auf = "audio/L16;rate=16000"
-	param.Business.Vcn = conf.XfVcn
+	param.Business.Vcn = conf[models.BusinessConfXfVcn]
 	param.Business.Speed = 50
 	param.Business.Volume = 100
 	param.Business.Pitch = 50
@@ -220,20 +220,20 @@ func CreateReportVideo(reportTitle, reportContent, reportTime string) (uploadUrl
 
 	// 获取基础配置, 若未配置则直接返回
 	conf, e := models.GetBusinessConf()
-	if e != nil && e.Error() != utils.ErrNoRow() {
+	if e != nil {
 		err = fmt.Errorf("获取基础配置失败, Err: " + e.Error())
 		return
 	}
-	if conf.UseXf == 0 {
+	if conf[models.BusinessConfUseXf] != "true" {
 		return
 	}
-	if conf.XfAppid == "" || conf.XfApiKey == "" || conf.XfApiSecret == "" || conf.XfVcn == "" {
+	if conf[models.BusinessConfXfAppid] == "" || conf[models.BusinessConfXfApiKey] == "" || conf[models.BusinessConfXfApiSecret] == "" || conf[models.BusinessConfXfVcn] == "" {
 		return
 	}
 	var xfReq XfParams
-	xfReq.XfAPPID = conf.XfAppid
-	xfReq.XfAPIKey = conf.XfApiKey
-	xfReq.XfAPISecret = conf.XfApiSecret
+	xfReq.XfAPPID = conf[models.BusinessConfXfAppid]
+	xfReq.XfAPIKey = conf[models.BusinessConfXfApiKey]
+	xfReq.XfAPISecret = conf[models.BusinessConfXfApiSecret]
 
 	ct, err := time.Parse(utils.FormatDateTime, reportTime)
 	if err != nil {
@@ -252,11 +252,11 @@ func CreateReportVideo(reportTitle, reportContent, reportTime string) (uploadUrl
 	}
 
 	param := new(models.XfSendParam)
-	param.Common.AppId = conf.XfAppid
+	param.Common.AppId = conf[models.BusinessConfXfAppid]
 	param.Business.Aue = "lame"
 	param.Business.Sfl = 1
 	param.Business.Auf = "audio/L16;rate=16000"
-	param.Business.Vcn = conf.XfVcn
+	param.Business.Vcn = conf[models.BusinessConfXfVcn]
 	param.Business.Speed = 50
 	param.Business.Volume = 100
 	param.Business.Pitch = 50