浏览代码

新增报告详情接口

xiexiaoyuan 2 年之前
父节点
当前提交
bd721798a2

+ 65 - 3
controller/english_report/english_report.go

@@ -10,7 +10,9 @@ import (
 	"hongze/hongze_yb_en_api/models/english_classify"
 	"hongze/hongze_yb_en_api/models/english_report"
 	elasticService "hongze/hongze_yb_en_api/services/elastic"
+	english_report_service "hongze/hongze_yb_en_api/services/english_report"
 	"hongze/hongze_yb_en_api/utils"
+	"html"
 )
 
 type EnglishReportController struct {}
@@ -36,7 +38,7 @@ func (er *EnglishReportController) List(c *gin.Context) {
 	var pars []interface{}
 	var total int64
 	var tmpList []*english_report.Report
-	var list []*english_report.ListItem
+	var list []*english_report.ReportListItem
 
 	if req.ClassifyIdFirst != "" {
 		condition += " and classify_id_first = ?"
@@ -55,7 +57,7 @@ func (er *EnglishReportController) List(c *gin.Context) {
 	}
 	if len(tmpList) > 0 {
 		for _, v := range tmpList {
-			tmp := &english_report.ListItem{
+			tmp := &english_report.ReportListItem{
 				Id:                 v.Id,
 				AddType:            v.AddType,
 				ClassifyIdFirst:    v.ClassifyIdFirst,
@@ -205,4 +207,64 @@ func (er *EnglishReportController) FilterByEs(c *gin.Context) {
 	baseData.SetPage(page)
 	baseData.SetList(reportList)
 	resp.OkData("搜索成功", baseData, c)
-}
+}
+
+func (er *EnglishReportController) Detail(c *gin.Context) {
+	req := new(english_report.ReportDetailReq)
+	err := c.BindQuery(&req)
+	if err != nil {
+		errs, ok := err.(validator.ValidationErrors)
+		if !ok {
+			resp.FailData("参数解析失败", "Err:"+err.Error(), c)
+			return
+		}
+		resp.FailData("参数解析失败", errs.Translate(global.Trans), c)
+		return
+	}
+
+	reportItem := new(english_report.Report)
+	reportItem, err = reportItem.GetEnglishReportByCode(req.ReportCode)
+	if err != nil {
+		resp.FailMsg("该报告已删除", "报告查询失败,Err:" + err.Error(), c)
+		return
+	}
+	err = reportItem.UpdatePvByReportCode(req.ReportCode)
+	if err != nil {
+		resp.FailMsg("更新失败", "更新失败,Err:" + err.Error(), c)
+		return
+	}
+	reportItem.ContentSub = html.UnescapeString(reportItem.ContentSub)
+	reportItem.Content = html.UnescapeString(reportItem.Content)
+
+	// 记录邮箱
+	if req.ShareEmail > 0 {
+		go english_report_service.DealEmail(req.ReportCode, req.ShareEmail)
+	}
+	reportDetail := &english_report.ReportDetail{
+		Id:                 reportItem.Id,
+		AddType:            reportItem.AddType,
+		ClassifyIdFirst:    reportItem.ClassifyIdFirst,
+		ClassifyNameFirst:  reportItem.ClassifyNameFirst,
+		ClassifyIdSecond:   reportItem.ClassifyIdSecond,
+		ClassifyNameSecond: reportItem.ClassifyNameSecond,
+		Title:              reportItem.Title,
+		Abstract:           reportItem.Abstract,
+		Author:             reportItem.Author,
+		Overview:           reportItem.Overview,
+		Content:            reportItem.Content,
+		ContentSub:         reportItem.ContentSub,
+		Frequency:          reportItem.Frequency,
+		PublishTime:        utils.TimeTransferString(utils.FormatDateTime, reportItem.PublishTime),
+		Stage:              reportItem.Stage,
+		VideoUrl:           reportItem.VideoUrl,
+		VideoName:          reportItem.VideoName,
+		VideoPlaySeconds:   reportItem.VideoPlaySeconds,
+		VideoSize:          reportItem.VideoSize,
+		ReportCode:         reportItem.ReportCode,
+		CreateTime:         utils.TimeTransferString(utils.FormatDateTime, reportItem.CreateTime),
+		ModifyTime:         utils.TimeTransferString(utils.FormatDateTime, reportItem.ModifyTime),
+	}
+	baseData := new(english_report.ReportDetailResp)
+	baseData.Report = reportDetail
+	resp.OkData("查询成功", baseData, c)
+}

+ 4 - 3
controller/resp/base.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"github.com/gin-gonic/gin"
 	"hongze/hongze_yb_en_api/global"
+	"hongze/hongze_yb_en_api/utils"
 	"strings"
 )
 
@@ -46,13 +47,13 @@ func result(code int, resultData ResultData, c *gin.Context) {
 	}
 
 	// 测试环境不加密
-	//if global.CONFIG.Serve.RunMode == "debug" {
+	if global.CONFIG.Serve.RunMode == "debug" {
 		c.JSON(code, resultData)
-	/*} else {
+	} else {
 		global.LOG.Info(strings.Join(logSlice, ";"))
 		encryptResult := utils.DesBase64Encrypt(jsonByte)
 		c.JSON(code, string(encryptResult))
-	}*/
+	}
 	c.Abort()
 }
 

+ 2 - 2
main.go

@@ -4,9 +4,9 @@ import (
 	"hongze/hongze_yb_en_api/core"
 )
 
-// @title 弘则人力资源管理系统API接口文档
+// @title 弘则英文研报api系统
 // @version 1.0
-// @description 弘则人力资源管理系统API接口文档
+// @description 弘则英文研报api系统
 // @termsOfService https://www.hzinsights.com/
 
 // @contact.name www.hzinsights.com/

+ 36 - 0
models/english_company/company.go

@@ -0,0 +1,36 @@
+package english_company
+
+import (
+	"hongze/hongze_yb_en_api/global"
+	"hongze/hongze_yb_en_api/models/base"
+)
+
+// 英文客户表
+type Company struct {
+	CompanyId   uint   `gorm:"primaryKey;column:company_id" json:"company_id"` //公司ID
+	CompanyName string `gorm:"column:company_name" json:"company_name"`        //公司名称
+	CountryCode string `gorm:"column:country_code" json:"country_code"`        //国家代码
+	Country     string `gorm:"column:country" json:"country"`                  //国家
+	SellerId    uint   `gorm:"column:seller_id" json:"seller_id"`              //销售ID
+	SellerName  string `gorm:"column:seller_name" json:"seller_name"`          //销售姓名
+	ViewTotal   uint   `gorm:"column:view_total" json:"view_total"`            //累计点击量/阅读量
+	IsDeleted   uint8  `gorm:"column:is_deleted" json:"is_deleted"`            //删除状态:0-正常;1-已删除
+	base.TimeBase
+}
+
+// TableName get sql table name.获取数据库表名
+func (c *Company) TableName() string {
+	return "english_company"
+}
+
+// 修改
+func (c *Company) Update(updateCols []string) (err error) {
+	err = global.DEFAULT_MYSQL.Model(c).Select(updateCols).Updates(c).Error
+	return
+}
+
+func (c *Company) UpdateViewTotalByCompanyId(companyId uint) (err error) {
+	sql := `UPDATE english_company SET view_total = view_total+1 WHERE company_id = ? `
+	err = global.DEFAULT_MYSQL.Exec(sql, companyId).Error
+	return
+}

+ 62 - 5
models/english_report/report.go

@@ -7,7 +7,7 @@ import (
 )
 
 type Report struct {
-	Id                 int       `gorm:"primaryKey;column:id" json:"id"`
+	Id                 uint       `gorm:"primaryKey;column:id" json:"id"`
 	AddType            int8      `gorm:"column:add_type" json:"add_type"`                         //新增方式:1:新增报告,2:继承报告
 	ClassifyIdFirst    int       `gorm:"column:classify_id_first" json:"classify_id_first"`       //一级分类id
 	ClassifyNameFirst  string    `gorm:"column:classify_name_first" json:"classify_name_first"`   //一级分类名称
@@ -47,8 +47,8 @@ type ReportListReq struct {
 	base.PageReq
 }
 
-type ListItem struct {
-	Id                 int    `json:"id"`
+type ReportListItem struct {
+	Id                 uint    `json:"id"`
 	AddType            int8   `json:"add_type"`             //新增方式:1:新增报告,2:继承报告
 	ClassifyIdFirst    int    `json:"classify_id_first"`    //一级分类id
 	ClassifyNameFirst  string `json:"classify_name_first"`  //一级分类名称
@@ -74,8 +74,42 @@ type ReportSearchReq struct {
 	base.PageReq
 }
 
+type ReportDetailReq struct {
+	ReportCode string `json:"report_code" form:"report_code" binding:"required"` //报告唯一编码
+	ShareEmail int `json:"share_email" form:"share_email"` //推送的邮箱ID
+}
+
+type ReportDetail struct {
+	Id                 uint   `json:"id"`
+	AddType            int8   `json:"add_type"`             //新增方式:1:新增报告,2:继承报告
+	ClassifyIdFirst    int    `json:"classify_id_first"`    //一级分类id
+	ClassifyNameFirst  string `json:"classify_name_first"`  //一级分类名称
+	ClassifyIdSecond   int    `json:"classify_id_second"`   //二级分类id
+	ClassifyNameSecond string `json:"classify_name_second"` //二级分类名称
+	Title              string `json:"title"`                //标题
+	Abstract           string `json:"abstract"`             //摘要
+	Author             string `json:"author"`               //作者
+	Content            string `json:"content"`              //内容
+	ContentSub         string `json:"content_sub"`          //内容
+	Frequency          string `json:"frequency"`            //频度
+	PublishTime        string `json:"publish_time"`         //发布时间
+	Stage              int    `json:"stage"`                //期数
+	VideoUrl           string `json:"video_url"`            //音频文件URL
+	VideoName          string `json:"video_name"`           //音频文件名称
+	VideoPlaySeconds   string `json:"video_play_seconds"`   //音频播放时长
+	ReportCode         string `json:"report_code"`          //报告唯一编码
+	CreateTime         string `json:"create_time"`          //创建时间
+	ModifyTime         string `json:"modify_time"`          //最后更新时间
+	Overview           string `json:"overview"`             //概述
+	VideoSize          string `json:"video_size"`           //音频文件大小,单位M
+}
+
+type ReportDetailResp struct {
+	Report *ReportDetail `json:"report"`
+}
+
 type SearchEnglishReportItem struct {
-	Id                 int    `json:"id"`
+	Id                 uint    `json:"id"`
 	ClassifyIdFirst    int    `json:"classify_id_first"`    //一级分类id
 	ClassifyNameFirst  string `json:"classify_name_first"`  //一级分类名称
 	ClassifyIdSecond   int    `json:"classify_id_second"`   //二级分类id
@@ -89,7 +123,7 @@ type SearchEnglishReportItem struct {
 }
 
 type ElasticEnglishReportDetail struct {
-	ReportId           int
+	ReportId           uint
 	ClassifyIdFirst    int
 	ClassifyNameFirst  string
 	ClassifyIdSecond   int
@@ -120,3 +154,26 @@ func (r *Report) SelectPage(page base.IPage, condition string, pars []interface{
 	err = query.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&results).Error
 	return
 }
+
+func (r *Report) GetEnglishReportByCode(reportCode string) (item *Report, err error) {
+	err = global.MYSQL["rddp"].Model(r).Where("report_code= ?", reportCode).First(&item).Error
+	return
+}
+
+// 修改
+func (r *Report) Update(updateCols []string) (err error) {
+	err = global.DEFAULT_MYSQL.Model(r).Select(updateCols).Updates(r).Error
+	return
+}
+
+func (r *Report) UpdatePvEmailByReportCode(reportCode string) (err error) {
+	sql := `UPDATE english_report SET pv_email = pv_email+1 WHERE report_code = ?  `
+	err = global.DEFAULT_MYSQL.Exec(sql, reportCode).Error
+	return
+}
+
+func (r *Report) UpdatePvByReportCode(reportCode string) (err error) {
+	sql := `UPDATE english_report SET pv = pv+1 WHERE report_code = ?  `
+	err = global.DEFAULT_MYSQL.Exec(sql, reportCode).Error
+	return
+}

+ 49 - 0
models/english_report_email/email.go

@@ -0,0 +1,49 @@
+package english_report_email
+
+import (
+	"hongze/hongze_yb_en_api/global"
+	"hongze/hongze_yb_en_api/models/base"
+	"time"
+)
+
+// 英文研报-邮箱
+type Email struct {
+	Id           uint      `gorm:"primaryKey;column:id" json:"id"`
+	CompanyId    uint      `gorm:"column:company_id" json:"company_id"`         //客户ID
+	Name         string    `gorm:"column:name" json:"name"`                     //客户名称
+	Email        string    `gorm:"column:email" json:"email"`                   //邮箱地址
+	ViewTotal    uint      `gorm:"column:view_total" json:"view_total"`         //累计点击量/阅读量
+	LastViewTime time.Time `gorm:"column:last_view_time" json:"last_view_time"` //最后阅读时间
+	IsDeleted    uint8     `gorm:"column:is_deleted" json:"is_deleted"`         //删除状态:0-正常;1-已删除
+	AdminId      uint      `gorm:"column:admin_id" json:"admin_id"`             //创建人ID
+	AdminName    string    `gorm:"column:admin_name" json:"admin_name"`         //创建人名称
+	base.TimeBase
+}
+
+// TableName get sql table name.获取数据库表名
+func (e *Email) TableName() string {
+	return "english_report_email"
+}
+
+// Add 新增
+func (e *Email) Add() (err error) {
+	err = global.DEFAULT_MYSQL.Create(e).Error
+	return
+}
+
+// 修改
+func (e *Email) Update(updateCols []string) (err error) {
+	err = global.DEFAULT_MYSQL.Model(e).Select(updateCols).Updates(e).Error
+	return
+}
+
+func (e *Email) GetById(id int) (item *Email, err error) {
+	err = global.MYSQL["rddp"].Model(e).Where("is_deleted = 0 AND id= ?", id).First(&item).Error
+	return
+}
+
+func (e *Email) UpdateViewTotalById(Id uint) (err error) {
+	sql := `UPDATE english_report_email SET view_total = view_total+1, last_view_time = NOW() WHERE id = ? `
+	err = global.DEFAULT_MYSQL.Exec(sql, Id).Error
+	return
+}

+ 25 - 0
models/english_report_email/email_pv.go

@@ -0,0 +1,25 @@
+package english_report_email
+
+import (
+	"hongze/hongze_yb_en_api/global"
+	"time"
+)
+
+// 英文研报-邮箱PV
+type EmailPv struct {
+	Id         uint      `gorm:"primaryKey;column:id" json:"id"`
+	ReportId   uint      `gorm:"column:report_id" json:"report_id"`     //报告ID
+	EmailId    uint      `gorm:"column:email_id" json:"email_id"`       //邮箱ID
+	CreateTime time.Time `gorm:"column:create_time" json:"create_time"` //访问时间
+}
+
+// TableName get sql table name.获取数据库表名
+func (e *EmailPv) TableName() string {
+	return "english_report_email_pv"
+}
+
+// Add 新增
+func (e *EmailPv) Add() (err error) {
+	err = global.DEFAULT_MYSQL.Create(e).Error
+	return
+}

+ 1 - 0
routers/english_report.go

@@ -12,4 +12,5 @@ func InitReport(baseGroup *gin.RouterGroup) {
 	group.GET("list", controller.List)
 	group.GET("classify", controller.Classify)
 	group.GET("filter_by_es", controller.FilterByEs)
+	group.GET("detail", controller.Detail)
 }

+ 56 - 0
services/english_report/report.go

@@ -0,0 +1,56 @@
+package english_report
+
+import (
+	"hongze/hongze_yb_en_api/models/english_company"
+	"hongze/hongze_yb_en_api/models/english_report"
+	"hongze/hongze_yb_en_api/models/english_report_email"
+	"hongze/hongze_yb_en_api/services/alarm_msg"
+	"hongze/hongze_yb_en_api/utils"
+	"time"
+)
+
+func DealEmail(reportCode string, shareEmailId int) (err error, errMsg string)  {
+	defer func() {
+		if err != nil {
+			alarm_msg.SendAlarmMsg(utils.APPNAME+"更新英文报告邮箱PV失败, ErrMsg: "+errMsg, 2)
+		}
+	}()
+	emailItem := new(english_report_email.Email)
+	userEmail, err := emailItem.GetById(shareEmailId)
+	if err != nil && err != utils.ErrNoRow {
+		errMsg = "获取客户邮箱信息失败, Err:" + err.Error()
+		return
+	}
+	if userEmail == nil {
+		return
+	}
+	// 更新报告邮箱pv(冗余)
+	reportItem := new(english_report.Report)
+	if err = reportItem.UpdatePvEmailByReportCode(reportCode); err != nil {
+		errMsg = "更新报告邮箱PV失败, Err:" + err.Error()
+		return
+	}
+	// 记录邮箱PV
+	pv := &english_report_email.EmailPv{
+		ReportId:   reportItem.Id,
+		EmailId:    userEmail.Id,
+		CreateTime: time.Now().Local(),
+	}
+	if err = pv.Add(); err != nil {
+		errMsg = "新增邮箱PV失败, Err: " + err.Error()
+		return
+	}
+	// 更新阅读量
+	if err = emailItem.UpdateViewTotalById(userEmail.Id); err != nil {
+		errMsg = "更新英文联系人阅读量失败, Err: " + err.Error()
+		return
+	}
+	if userEmail.CompanyId > 0 {
+		companyItem := new(english_company.Company)
+		if err = companyItem.UpdateViewTotalByCompanyId(userEmail.CompanyId); err != nil {
+			errMsg = "更新英文客户阅读量, Err: " + err.Error()
+			return
+		}
+	}
+	return
+}

+ 1 - 1
utils/des3.go

@@ -12,7 +12,7 @@ import (
 )
 
 const (
-	key = ""
+	key = "ZwffiVNfOkPwzQARDfxOKWiO"
 )
 
 //des3 + base64 encrypt