Selaa lähdekoodia

优化,已购页面,新增用户浏览记录改成异步

xiexiaoyuan 3 vuotta sitten
vanhempi
commit
32ca4884bc

+ 3 - 0
core/run_server.go

@@ -18,6 +18,9 @@ func RunServe() {
 	}
 	//初始化elasticSearch 搜索客户端
 	init_serve.NewEsClient()
+
+	//启动任务
+	init_serve.InitTask()
 	// 3.监听端口,默认在8080
 	// Run("里面不指定端口号默认为8080")
 	err := r.Run(fmt.Sprint("0.0.0.0:", global.CONFIG.Serve.Port)) // 监听并在 0.0.0.0:8080 上启动服务

+ 14 - 0
init_serve/task.go

@@ -0,0 +1,14 @@
+package init_serve
+
+import (
+	"hongze/hongze_yb/task"
+)
+
+func InitTask()  {
+	chlist := task.GetTaskList()
+	go func() {
+		for l := range chlist {
+			l.Exec()
+		}
+	}()
+}

+ 1 - 0
models/tables/chart_permission/chart_permission.go

@@ -21,6 +21,7 @@ type ChartPermission struct {
 	IsOther             int8      `gorm:"column:is_other;type:tinyint(2);not null;default:0" json:"isOther"`                   // 是否是其他,用于查研观向小程序后台展示
 	IsReport            int8      `gorm:"index:is_report;column:is_report;type:tinyint(4);not null;default:0" json:"isReport"` // 是否是报告,用于查研观向小程序前台报告展示
 	CygxAuth            int8      `gorm:"column:cygx_auth;type:tinyint(4);not null;default:0" json:"cygxAuth"`                 // 是否是权限,用于查研观向小程序前台权限校验
+	YbImgUrl            string      `gorm:"column:yb_img_url;type:varchar(255)" json:"yb_img_url"`                            // 研报小程序报告列表icon
 }
 
 // TableName get sql table name.获取数据库表名

+ 1 - 1
models/tables/rddp/classify/classify.go

@@ -22,7 +22,7 @@ type Classify struct {
 	ClassifyLabel string `gorm:"column:classify_label" db:"classify_label" json:"classify_label" form:"classify_label"`
 	ShowType uint8 `gorm:"column:show_type" db:"show_type" json:"show_type" form:"show_type"` //展示类型:1-列表 2-专栏
 	HasTeleconference uint8 `gorm:"column:has_teleconference" db:"has_teleconference" json:"has_teleconference" form:"has_teleconference"` //是否有电话会 0-否 1-是
-	IsVip int8 `gorm:"column:is_vip" db:"is_vip" json:"is_vip" form:"is_vip"` //1:是VIP客户,0不是VIP
+	VipTitle string `gorm:"column:vip_title" db:"vip_title" json:"vip_title"` //研究员头衔
 	YbIconUrl string `gorm:"column:yb_icon_url" db:"yb_icon_url" json:"yb_icon_url" form:"yb_icon_url"` //研报3.0已购页面icon图片地址
 	YbBgUrl string `gorm:"column:yb_bg_url" db:"yb_bg_url" json:"yb_bg_url" form:"yb_bg_url"` //研报3.0已购详情背景图地址
 }

+ 1 - 4
services/report/classify.go

@@ -127,10 +127,7 @@ func GetClassifyDetail(user user.UserInfo, classifyIdSecond int) (detail *respon
 	detail.ClassifyNameSecond = classifyInfo.ClassifyName
 	detail.Abstract = classifyInfo.Abstract
 	detail.Descript = classifyInfo.Descript
-	if  classifyInfo.IsVip > 0{
-		detail.VipTitle = "弘则研究董事长"
-	}
-
+	detail.VipTitle = classifyInfo.VipTitle
 	detail.PermissionCheck = &permissionCheckInfo
 	detail.AuthOk = authOk
 

+ 38 - 22
services/report/report.go

@@ -20,6 +20,7 @@ import (
 	"hongze/hongze_yb/services/company"
 	elasticService "hongze/hongze_yb/services/elastic"
 	"hongze/hongze_yb/services/user"
+	"hongze/hongze_yb/task"
 	"hongze/hongze_yb/utils"
 	"html"
 	"sort"
@@ -319,12 +320,13 @@ func GetPurchaseDetail(permissionIds []int, userId uint64, classifyIdFirst int,
 	}
 	ret.List = list
 	ret.Paging = response.GetPaging(pageIndex, pageSize, int(total))
-	_, tErr := BatchInsertReportView(weekReportIds, userId, classifyNameFirst, classifyIdSeconds)
-
-	if tErr != nil {
+	// 执行一个协程任务,新增用户浏览记录
+	//_, tErr := BatchInsertReportView(weekReportIds, userId, classifyNameFirst, classifyIdSeconds)
+	task.Task(BatchInsertReportView, weekReportIds, userId, classifyNameFirst, classifyIdSeconds)
+	/*if tErr != nil {
 		err = tErr
 		return
-	}
+	}*/
 	return
 }
 
@@ -439,8 +441,22 @@ func GetReportList(user user.UserInfo, keyWord string, classifyIdFirst, classify
 	pars = append(pars, classifyIdFirst)
 	permissionMap := make(map[string][]int)
 	checkPermissionMap := make(map[string]bool)
-	var reportImgUrl string
-	 reportImgMap := make(map[string]string)
+	permissionImageMap := make(map[string]string)
+	chartPermissionImageMap := make(map[int]string)
+    var reportImgUrl string
+    chartPermissionList, err := chart_permission.GetFiccListExceptTacticByProductId()
+	if err != nil {
+		errMsg = err.Error()
+		err = errors.New("分类查询出错")
+		return
+	}
+
+	if len(chartPermissionList) > 0 {
+		for _, v := range chartPermissionList {
+			chartPermissionImageMap[int(v.ChartPermissionID)] = v.YbImgUrl
+		}
+	}
+
 	if classifyIdSecond > 0 {
 		classifyInfo, tErr := classify.GetByClassifyId(classifyIdSecond)
 		if tErr != nil {
@@ -463,30 +479,30 @@ func GetReportList(user user.UserInfo, keyWord string, classifyIdFirst, classify
 			return
 		}
 		permissionMap[classifyInfo.ClassifyName] = permissionIds
-		reportImgUrl = classifyInfo.ReportImgUrl
+		if len(permissionIds)  > 0{
+			for _, v := range permissionIds {
+				reportImgUrl = chartPermissionImageMap[v]
+			}
+		}
+
 	}else{
+		if classifyParent.ClassifyName == "晨报" || classifyParent.ClassifyName == "周报"{
+			reportImgUrl =  chartPermissionImageMap[1]
+		}
+
 		chartPermissions, tErr := chart_permission_search_key_word_mapping.GetChartPermissionByFrom("rddp")
 		if tErr != nil {
 			errMsg = tErr.Error()
 			err = errors.New("分类权限查询出错")
 			return
 		}
+
 		if len(chartPermissions) > 0 {
 			for _, v := range chartPermissions {
 				permissionMap[v.KeyWord] = append(permissionMap[v.KeyWord], v.ChartPermissionId)
+				permissionImageMap[v.KeyWord] = chartPermissionImageMap[v.ChartPermissionId]
 			}
 		}
-		//获取二级分类的所有头像
-		classifyList, tErr := classify.GetListByPid(classifyIdFirst)
-		if tErr != nil {
-			errMsg = tErr.Error()
-			err = errors.New("二级分类查询出错")
-			return
-		}
-
-		for _, v := range classifyList {
-			reportImgMap[v.ClassifyName] = v.ReportImgUrl
-		}
 	}
 
 	// 获取有效的权限id列表
@@ -543,10 +559,10 @@ func GetReportList(user user.UserInfo, keyWord string, classifyIdFirst, classify
 			reportItem.Stage = reportInfo.Stage
 			reportItem.Abstract = reportInfo.Abstract
 			reportItem.Author = reportInfo.Author
-			if reportImgUrl != ""{
-				reportItem.ReportImgUrl = reportImgUrl
-			}else if url,ok := reportImgMap[reportInfo.ClassifyNameSecond]; ok {
-				reportItem.ReportImgUrl = url
+			if reportInfo.ClassifyNameFirst == "晨报" || reportInfo.ClassifyNameFirst == "周报" || classifyIdSecond > 0{
+				reportItem.ReportImgUrl = utils.ALIYUN_YBIMG_HOST + reportImgUrl
+			} else if url,ok := permissionImageMap[reportInfo.ClassifyNameSecond]; ok {
+				reportItem.ReportImgUrl = utils.ALIYUN_YBIMG_HOST + url
 			}
 			
 			if authOk,ok := checkPermissionMap[reportInfo.ClassifyNameSecond]; ok && authOk {

+ 16 - 2
services/report/report_view_log.go

@@ -1,6 +1,8 @@
 package report
 
 import (
+	"fmt"
+	"hongze/hongze_yb/global"
 	"hongze/hongze_yb/models/tables/rddp/report"
 	"hongze/hongze_yb/models/tables/rddp/report_view_log"
 	"time"
@@ -50,7 +52,19 @@ func GetUnRead(classifyIdSeconds []int, userId uint64) (unReadItem map[string]in
 }
 
 // BatchInsertReportView 批量新增报告已读记录
-func BatchInsertReportView(weekReportIds []int, userId uint64, classifyNameFirst string, classifyIdSeconds []int) (num int, err error)  {
+func BatchInsertReportView(params ...interface{}) {
+	var err error
+	userId   := params[1].(uint64)
+	defer func() {
+		if err != nil {
+			global.LOG.Critical(fmt.Sprintf("Task BatchInsertReportView: userId=%d, err:%s, recover:%s", userId, err.Error(), recover()))
+		}
+	}()
+
+	weekReportIds := params[0]
+	classifyNameFirst := params[2]
+	classifyIdSeconds := params[3]
+
 	firstDay := "2022-01-01"
 	var newReports []*report.Report
 	pars := make([]interface{}, 0)
@@ -114,7 +128,7 @@ func BatchInsertReportView(weekReportIds []int, userId uint64, classifyNameFirst
 			err = tErr
 			return
 		}
-		num = len(reportLogs)
+		//num := len(reportLogs)
 	}
 	return
 }

+ 65 - 0
task/task.go

@@ -0,0 +1,65 @@
+package task
+
+import (
+	"fmt"
+	"hongze/hongze_yb/global"
+	"hongze/hongze_yb/services"
+	"hongze/hongze_yb/utils"
+	"os"
+	"runtime"
+	"sync"
+	"time"
+)
+
+type TaskFunc func(params ...interface{})
+
+var taskList chan *Executor  //任务列表
+
+var once sync.Once
+func GetTaskList() chan *Executor {
+	once.Do(func() {
+		taskList = make(chan *Executor)
+	})
+	return taskList
+}
+
+type Executor struct {
+	f TaskFunc
+	params []interface{}
+}
+
+func (e *Executor) Exec()  {       //执行任务
+	defer func() {
+		if err := recover(); err !=nil {
+			stack := ""
+			msg := fmt.Sprintf("当前进程pid:%d; 父进程ppid:%d", os.Getpid(), os.Getppid())
+			stack += msg + "</br>"
+			global.LOG.Critical(msg)
+			msg = fmt.Sprintf("The params data is %v", e.params)
+			stack += msg + "</br>"
+			global.LOG.Critical(msg)
+			msg = fmt.Sprintf("Handler crashed with error %v", err)
+			stack += msg + "</br>"
+			global.LOG.Critical(msg)
+			for i := 1; ; i++ {
+				_, file, line, ok := runtime.Caller(i)
+				if !ok {
+					break
+				}
+				global.LOG.Critical(fmt.Sprintf("%s:%d", file, line))
+				stack = stack + fmt.Sprintln(fmt.Sprintf("%s:%d</br>", file, line))
+			}
+			fmt.Println("stack:", stack)
+			go services.SendEmail(utils.APPNAME+"崩了"+time.Now().Format("2006-01-02 15:04:05"), stack, utils.EmailSendToUsers)
+		}
+	}()
+	e.f(e.params...)
+}
+
+func NewExecutor(f TaskFunc, params []interface{}) *Executor {
+	return &Executor{f: f, params: params}
+}
+
+func Task(f TaskFunc, params ...interface{})  {
+	taskList <- NewExecutor(f, params)
+}

+ 1 - 1
utils/constants.go

@@ -25,7 +25,7 @@ const (
 const (
 	APPNAME = "弘则研报"
 	//EmailSendToUsers = "glji@hzinsights.com;pyan@hzinsights.com;cxzhang@hzinsights.com"
-	EmailSendToUsers = "glji@hzinsights.com;pyan@hzinsights.com;hsun@hzinsights.com"
+	EmailSendToUsers = "glji@hzinsights.com;pyan@hzinsights.com;hsun@hzinsights.com;xyxie@hzinsights.com"
 )
 
 //聚合短信