Browse Source

太阳码

ziwen 2 years ago
parent
commit
57eae9ad01

+ 57 - 22
controller/pc/pc.go

@@ -8,37 +8,39 @@ import (
 	"hongze/hongze_yb/models/tables/rddp/banner"
 	"hongze/hongze_yb/models/tables/rddp/classify"
 	"hongze/hongze_yb/models/tables/rddp/report"
+	"hongze/hongze_yb/models/tables/yb_pc_suncode"
+	"hongze/hongze_yb/services"
 	"hongze/hongze_yb/services/pc"
 	userService "hongze/hongze_yb/services/user"
+	"hongze/hongze_yb/utils"
 	"strconv"
 )
 
 // LatestNews 研报首页最新资讯
-func LatestNews(c *gin.Context)  {
-	banner,err := banner.GetHomeBannerList()
+func LatestNews(c *gin.Context) {
+	banner, err := banner.GetHomeBannerList()
 	if err != nil {
 		response.Fail(err.Error(), c)
 		return
 	}
-	response.OkData("查询成功", banner, c )
+	response.OkData("查询成功", banner, c)
 	return
 }
 
-
 // Banner 首页banner图
-func Banner(c *gin.Context)  {
-	banner,err := banner.GetHomeBannerList()
+func Banner(c *gin.Context) {
+	banner, err := banner.GetHomeBannerList()
 	if err != nil {
 		response.Fail(err.Error(), c)
 		return
 	}
-	response.OkData("查询成功", banner, c )
+	response.OkData("查询成功", banner, c)
 	return
 }
 
 // LatestRelease 上新公告
-func LatestRelease(c *gin.Context)  {
-	classifyIdString := c.DefaultQuery("ClassifyId","")
+func LatestRelease(c *gin.Context) {
+	classifyIdString := c.DefaultQuery("ClassifyId", "")
 	if classifyIdString == "" {
 		response.Fail("请输入classifyId", c)
 		return
@@ -55,12 +57,12 @@ func LatestRelease(c *gin.Context)  {
 		return
 	}
 
-	response.OkData("查询成功", classifyInfo, c )
+	response.OkData("查询成功", classifyInfo, c)
 	return
 }
 
 // ClassifyDetail 专栏详情
-func ClassifyDetail(c *gin.Context)  {
+func ClassifyDetail(c *gin.Context) {
 	reqClassifyIdSecond := c.DefaultQuery("classify_id_second", "")
 	if reqClassifyIdSecond == "" {
 		response.Fail("请输入二级分类标识", c)
@@ -79,12 +81,12 @@ func ClassifyDetail(c *gin.Context)  {
 		response.Fail(err.Error(), c)
 		return
 	}
-	response.OkData("查询成功", detail, c )
+	response.OkData("查询成功", detail, c)
 	return
 }
 
 // ClassifyDetailBanner 专栏详情banner图
-func ClassifyDetailBanner(c *gin.Context)  {
+func ClassifyDetailBanner(c *gin.Context) {
 	reqReportId := c.DefaultQuery("reportId", "")
 	if reqReportId == "" {
 		response.Fail("请输入二级分类标识", c)
@@ -115,12 +117,12 @@ func ClassifyDetailBanner(c *gin.Context)  {
 		response.Fail("分类查询出错", c)
 		return
 	}
-	response.OkData("查询成功", classifyInfo, c )
+	response.OkData("查询成功", classifyInfo, c)
 	return
 }
 
 // Recommend 专栏详情页更多推荐
-func Recommend(c *gin.Context)  {
+func Recommend(c *gin.Context) {
 	reqReportId := c.DefaultQuery("reportId", "")
 	if reqReportId == "" {
 		response.Fail("请输入二级分类标识", c)
@@ -158,12 +160,12 @@ func Recommend(c *gin.Context)  {
 		return
 	}
 
-	response.OkData("查询成功", recommendList, c )
+	response.OkData("查询成功", recommendList, c)
 	return
 }
 
 // ClassifyFirstList Ficc 菜单
-func ClassifyFirstList(c *gin.Context)  {
+func ClassifyFirstList(c *gin.Context) {
 	userinfo := userService.GetInfoByClaims(c)
 
 	classList, err := pc.GetClassifyFirstList(userinfo)
@@ -171,17 +173,50 @@ func ClassifyFirstList(c *gin.Context)  {
 		response.Fail(err.Error(), c)
 		return
 	}
-	response.OkData("查询成功", classList, c )
+	response.OkData("查询成功", classList, c)
 	return
 }
 
 // CustomerComment 客户评价
-func CustomerComment(c *gin.Context)  {
-	lists,err := customer_comment.GetCustomerComment()
+func CustomerComment(c *gin.Context) {
+	lists, err := customer_comment.GetCustomerComment()
 	if err != nil {
 		response.Fail(err.Error(), c)
 		return
 	}
-	response.OkData("查询成功", lists, c )
+	response.OkData("查询成功", lists, c)
 	return
-}
+}
+
+// GetSunCode 获取太阳码
+// @Tags 公共模块
+// @Summary  获取分享海报
+// @Description 获取分享海报
+// @Param	CodeScene	query string true "scene值"
+// @Param	CodePage	query string true "codePage"
+// @Success 200 {object} string "获取成功"
+// @failure 400 {string} string "获取失败"
+// @Router /pc/getSunCode [post]
+func GetSunCode(c *gin.Context) {
+	codeScene := c.Query("CodeScene")
+	codePage := c.Query("CodePage")
+
+	var sunCodeUrl string
+	//先查,查不到再去生成上传
+	item,err  := yb_pc_suncode.GetYbPcSunCode(codeScene, codePage)
+	sunCodeUrl = item.SuncodeURL
+	if err != nil && err != utils.ErrNoRow{
+		response.Fail(err.Error(), c)
+		return
+	}
+
+	if sunCodeUrl == ""{
+		sunCodeUrl, err = services.PcCreateAndUploadSunCode(codePage, codeScene)
+		if err != nil {
+			return
+		}
+	}
+
+	response.OkData("查询成功", sunCodeUrl, c)
+	return
+}

+ 8 - 0
models/tables/yb_pc_suncode/create.go

@@ -0,0 +1,8 @@
+package yb_pc_suncode
+
+import "hongze/hongze_yb/global"
+
+func (item *YbPcSuncode) Create() (err error) {
+	err = global.DEFAULT_MYSQL.Create(item).Error
+	return
+}

+ 11 - 0
models/tables/yb_pc_suncode/query.go

@@ -0,0 +1,11 @@
+package yb_pc_suncode
+
+import (
+	"hongze/hongze_yb/global"
+)
+
+// GetYbPcSunCode 获取太阳码
+func GetYbPcSunCode(scene, page string) (item *YbPcSuncode, err error) {
+	err = global.DEFAULT_MYSQL.Where("scene = ? AND code_page = ? ", scene, page).First(&item).Error
+	return
+}

+ 35 - 0
models/tables/yb_pc_suncode/yb_pc_suncode.go

@@ -0,0 +1,35 @@
+package yb_pc_suncode
+
+import "time"
+
+// YbPcSuncode 活动海报表
+type YbPcSuncode struct {
+	SuncodeID  uint32    `gorm:"primaryKey;index:idx_suncode_id;column:suncode_id;type:int(11) unsigned;not null" json:"-"`
+	Scene      string    `gorm:"column:scene;type:varchar(255);not null;default:0" json:"scene"` // 微信scene
+	SceneMd5   string    `gorm:"column:scene_md5;type:varchar(255);not null" json:"sceneMd5"`
+	CodePage   string    `gorm:"column:code_page;type:varchar(255);not null;default:''" json:"codePage"`     // 路径
+	SuncodeURL string    `gorm:"column:suncode_url;type:varchar(255);not null;default:''" json:"suncodeUrl"` // 太阳码储存地址
+	CreateTime time.Time `gorm:"column:create_time;type:timestamp;default:CURRENT_TIMESTAMP" json:"createTime"`
+}
+
+// TableName get sql table name.获取数据库表名
+func (m *YbPcSuncode) TableName() string {
+	return "yb_pc_suncode"
+}
+
+// YbPcSuncodeColumns get sql column name.获取数据库列名
+var YbPcSuncodeColumns = struct {
+	SuncodeID  string
+	Scene      string
+	SceneMd5   string
+	CodePage   string
+	SuncodeURL string
+	CreateTime string
+}{
+	SuncodeID:  "suncode_id",
+	Scene:      "scene",
+	SceneMd5:   "scene_md5",
+	CodePage:   "code_page",
+	SuncodeURL: "suncode_url",
+	CreateTime: "create_time",
+}

+ 1 - 0
routers/pc.go

@@ -16,4 +16,5 @@ func InitPc(r *gin.Engine)  {
 	rGroup.GET("/recommend", pc.Recommend)
 	rGroup.GET("/classify", pc.ClassifyFirstList)
 	rGroup.GET("/comment", pc.CustomerComment)
+	rGroup.GET("/getSunCode", pc.GetSunCode)
 }

+ 66 - 0
services/sun_code.go

@@ -0,0 +1,66 @@
+package services
+
+import (
+	"errors"
+	"fmt"
+	"hongze/hongze_yb/models/tables/yb_pc_suncode"
+	"hongze/hongze_yb/services/wx_app"
+	"hongze/hongze_yb/utils"
+	"os"
+	"time"
+)
+
+// CreateAndUploadSunCode 生成太阳码并上传OSS
+func PcCreateAndUploadSunCode(page, scene string) (imgUrl string, err error) {
+	if page == "" {
+		err = errors.New("page不能为空")
+		return
+	}
+
+	// scene超过32位会生成失败,md5处理至32位
+	sceneMD5 := "a=1"
+	if scene != "" {
+		sceneMD5 = utils.MD5(scene)
+	}
+	picByte, err := wx_app.GetSunCode(page, sceneMD5)
+	if err != nil {
+		return
+	}
+	// 生成图片
+	localPath := "./static/img"
+	fileName := utils.GetRandStringNoSpecialChar(28) + ".png"
+	fpath := fmt.Sprint(localPath, "/", fileName)
+	f, err := os.Create(fpath)
+	if err != nil {
+		return
+	}
+	if _, err = f.Write(picByte); err != nil {
+		return
+	}
+	defer func() {
+		f.Close()
+		os.Remove(fpath)
+	}()
+	// 上传OSS
+	fileDir := "yb/suncode/"
+	imgUrl, err = UploadAliyunToDir(fileName, fpath, fileDir)
+	if err != nil {
+		return
+	}
+
+	if err != nil {
+		return
+	}
+	// 记录参数
+	if scene != "" {
+		newPars := &yb_pc_suncode.YbPcSuncode{
+			Scene:      scene,
+			SceneMd5:   sceneMD5,
+			CodePage:   page,
+			SuncodeURL: imgUrl,
+			CreateTime: time.Now(),
+		}
+		err = newPars.Create()
+	}
+	return
+}