|
@@ -1247,7 +1247,7 @@ func PublishReport(reportId int, reportUrl string, sysUser *system.Admin) (tips
|
|
|
|
|
|
// 生成报告pdf和长图
|
|
|
{
|
|
|
- reportPdfUrl := GetGeneralPdfUrl(reportInfo.ReportCode, reportInfo.ClassifyNameFirst, reportInfo.ReportLayout)
|
|
|
+ reportPdfUrl := GetGeneralPdfUrl(reportInfo.Id, reportInfo.ReportCode, reportInfo.ClassifyNameFirst, reportInfo.ReportLayout)
|
|
|
go Report2pdfAndJpeg(reportPdfUrl, reportId, 1)
|
|
|
}
|
|
|
|
|
@@ -1374,7 +1374,7 @@ func PublishChapterReport(reportInfo *models.Report, reportUrl string, sysUser *
|
|
|
|
|
|
// 生成报告pdf和长图
|
|
|
{
|
|
|
- reportPdfUrl := GetGeneralPdfUrl(reportInfo.ReportCode, reportInfo.ClassifyNameFirst, reportInfo.ReportLayout)
|
|
|
+ reportPdfUrl := GetGeneralPdfUrl(reportInfo.Id, reportInfo.ReportCode, reportInfo.ClassifyNameFirst, reportInfo.ReportLayout)
|
|
|
go Report2pdfAndJpeg(reportPdfUrl, reportId, 1)
|
|
|
}
|
|
|
|
|
@@ -1612,7 +1612,7 @@ func UpdateReportVideo(reportInfo *models.Report) {
|
|
|
// @param reportCode string
|
|
|
// @param reportLayout int8
|
|
|
// @return pdfUrl string
|
|
|
-func GetGeneralPdfUrl(reportCode, classifyFirstName string, reportLayout int8) (pdfUrl string) {
|
|
|
+func GetGeneralPdfUrl(reportId int, reportCode, classifyFirstName string, reportLayout int8) (pdfUrl string) {
|
|
|
// 如果是弘则,且是晨、周报,那么就不返回
|
|
|
if utils.InArrayByStr([]string{utils.BusinessCodeRelease, utils.BusinessCodeSandbox, utils.BusinessCodeDebug}, utils.BusinessCode) && utils.InArrayByStr([]string{"晨报", "周报"}, classifyFirstName) {
|
|
|
return
|
|
@@ -1641,6 +1641,14 @@ func GetGeneralPdfUrl(reportCode, classifyFirstName string, reportLayout int8) (
|
|
|
pdfUrl = fmt.Sprintf("%s/reportshare_smart_pdf?code=%s", reportUrl, reportCode)
|
|
|
}
|
|
|
|
|
|
+ if pdfUrl != "" {
|
|
|
+ token := utils.MD5(fmt.Sprint(pdfUrl, time.Now().UnixNano()/1e6))
|
|
|
+ e := generalReportAuthToken(token, ``, reportId)
|
|
|
+ if e == nil {
|
|
|
+ pdfUrl = fmt.Sprintf("%s&authToken=%s", pdfUrl, token)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -1660,84 +1668,6 @@ func GetReportWaterMarkPdf(reportInfo *models.Report, sysUser *system.Admin) {
|
|
|
GeneralWaterMarkPdf(filePath, waterMarkStr)
|
|
|
}
|
|
|
|
|
|
-// GetReportShareUrlToken 获取报告分享链接token
|
|
|
-func GetReportShareUrlToken(req models.ReportShartUrlReq, adminId int) (linkToken string, err error) {
|
|
|
- cacheLinkKey := utils.CACHE_REPORT_SHARE_SHORT_Url + strconv.Itoa(req.ReportId) + "userId:" + strconv.Itoa(adminId)
|
|
|
- linkToken, _ = utils.Rc.RedisString(cacheLinkKey)
|
|
|
- if linkToken != "" && utils.Rc.IsExist(fmt.Sprint(utils.CACHE_REPORT_SHARE_ORIGIN_Url, utils.MD5(linkToken))) {
|
|
|
- return
|
|
|
- }
|
|
|
- var tokenKey string
|
|
|
-
|
|
|
- var ok bool
|
|
|
- // 冲突检测
|
|
|
- for i := 0; i < 3; i++ {
|
|
|
- linkToken = req.Url
|
|
|
- if i > 0 {
|
|
|
- linkToken += "_" + utils.GetRandDigit(3)
|
|
|
- }
|
|
|
- hashUrl := utils.MurmurHash64([]byte(linkToken))
|
|
|
- linkToken = utils.ConvertNumToBase62(hashUrl)
|
|
|
- // 拼上报告标题
|
|
|
- //linkToken = fmt.Sprintf("%s %s", linkToken, req.Title)
|
|
|
-
|
|
|
- tokenKey = fmt.Sprint(utils.CACHE_REPORT_SHARE_ORIGIN_Url, utils.MD5(linkToken))
|
|
|
- ok = utils.Rc.IsExist(tokenKey)
|
|
|
- if !ok {
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if !ok {
|
|
|
- after := time.Now().AddDate(0, 0, 7)
|
|
|
- err = utils.Rc.Put(cacheLinkKey, linkToken, time.Until(after))
|
|
|
- if err != nil {
|
|
|
- return
|
|
|
- }
|
|
|
- err = utils.Rc.Put(tokenKey, req.Url, time.Until(after))
|
|
|
- if err != nil {
|
|
|
- return
|
|
|
- }
|
|
|
- } else {
|
|
|
- linkToken = ""
|
|
|
- err = errors.New("生成链接失败")
|
|
|
- }
|
|
|
- return
|
|
|
-}
|
|
|
-
|
|
|
-func TransfromToOriginUrl(linkToken string) (originLink string, msg string, err error) {
|
|
|
- cacheLinkKey := fmt.Sprint(utils.CACHE_REPORT_SHARE_ORIGIN_Url, utils.MD5(linkToken))
|
|
|
- originLink, err = utils.Rc.RedisString(cacheLinkKey)
|
|
|
- if err != nil {
|
|
|
- if err == redis.Nil {
|
|
|
- msg = "链接已失效, 请重新获取"
|
|
|
- return
|
|
|
- }
|
|
|
- msg = "获取链接失败"
|
|
|
- return
|
|
|
- }
|
|
|
- if originLink == "" {
|
|
|
- msg = "链接已失效, 请重新获取"
|
|
|
- return
|
|
|
- }
|
|
|
- return
|
|
|
-}
|
|
|
-
|
|
|
-func FilterShareUrl() web.FilterFunc {
|
|
|
- return func(c *context.Context) {
|
|
|
- path := c.Input.Context.Request.URL.Path
|
|
|
- tokenArr := strings.Split(path, "/")
|
|
|
- token := tokenArr[len(tokenArr)-1]
|
|
|
-
|
|
|
- newPath := "/adminapi/report/share/link"
|
|
|
- q := c.Input.Context.Request.URL.Query()
|
|
|
- q.Add("Token", token)
|
|
|
- c.Input.Context.Request.URL.Path = newPath
|
|
|
- c.Input.Context.Request.URL.RawQuery = q.Encode()
|
|
|
-
|
|
|
- utils.ApiLog.Info(fmt.Sprintf("原始请求为:%s, 已修改请求路径为:%s?%s", path, newPath, q.Encode()))
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
// ResetMiniProgramReportDetailCover 重置小程序报告封面
|
|
|
func ResetMiniProgramReportDetailCover(reportId int) (err error) {
|
|
|
if utils.MYSQL_WEEKLY_URL == `` {
|
|
@@ -2116,7 +2046,7 @@ func linkAddToken(link string, tokenMap map[string]string) string {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- token, err := GeneralChartToken(showType, code, 30*time.Minute)
|
|
|
+ token, err := GeneralChartToken(showType, code)
|
|
|
if err != nil {
|
|
|
return link
|
|
|
}
|
|
@@ -2155,23 +2085,96 @@ func linkDelToken(link string) string {
|
|
|
}
|
|
|
|
|
|
// GeneralChartToken
|
|
|
-// @Description: 生产图表/表格授权token
|
|
|
+// @Description: 生成图表/表格授权token
|
|
|
// @author: Roc
|
|
|
// @datetime 2025-01-07 10:41:36
|
|
|
// @param showType string
|
|
|
// @param uniqueCode string
|
|
|
-// @param expireTime time.Duration
|
|
|
// @return token string
|
|
|
// @return err error
|
|
|
-func GeneralChartToken(showType, uniqueCode string, expireTime time.Duration) (token string, err error) {
|
|
|
+func GeneralChartToken(showType, uniqueCode string) (token string, err error) {
|
|
|
// 缓存key
|
|
|
token = utils.MD5(fmt.Sprint(showType+`:`, uniqueCode, time.Now().UnixNano()/1e6))
|
|
|
key := fmt.Sprint(utils.CACHE_CHART_AUTH, token)
|
|
|
- err = utils.Rc.Put(key, uniqueCode, expireTime)
|
|
|
+ err = utils.Rc.Put(key, uniqueCode, utils.BusinessConfReportChartExpiredTime)
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+// GeneralReportToken
|
|
|
+// @Description: 生成报告授权token
|
|
|
+// @author: Roc
|
|
|
+// @datetime 2025-01-07 10:41:36
|
|
|
+// @param uniqueCode string
|
|
|
+// @return token string
|
|
|
+// @return err error
|
|
|
+func GeneralReportToken(linkToken string, reportId int) (token string, err error) {
|
|
|
+ // 图表授权token
|
|
|
+ token = utils.MD5(fmt.Sprint(linkToken, time.Now().UnixNano()/1e6))
|
|
|
+
|
|
|
+ // 缓存key
|
|
|
+ reportKey := getReportShareTokenKey(linkToken)
|
|
|
+ err = utils.Rc.Put(reportKey, token, utils.BusinessConfReportChartExpiredTime)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 生成报告的图表授权token
|
|
|
+ err = generalReportAuthToken(token, ``, reportId)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// generalReportAuthToken
|
|
|
+// @Description: 生成报告的图表授权token
|
|
|
+// @author: Roc
|
|
|
+// @datetime 2025-03-17 17:47:07
|
|
|
+// @param token string
|
|
|
+// @param reportId int
|
|
|
+// @return err error
|
|
|
+func generalReportAuthToken(token, source string, reportId int) (err error) {
|
|
|
+ // 缓存key
|
|
|
+ reportTokenKey := getReportTokenKey(token, source)
|
|
|
+ err = utils.Rc.Put(reportTokenKey, reportId, utils.BusinessConfReportChartExpiredTime)
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// getReportShareTokenKey
|
|
|
+// @Description:
|
|
|
+// @author: Roc
|
|
|
+// @datetime 2025-03-17 14:00:14
|
|
|
+// @param linkToken string
|
|
|
+// @return string
|
|
|
+func getReportShareTokenKey(linkToken string) string {
|
|
|
+ return fmt.Sprint(utils.CACHE_REPORT_SHARE_AUTH, utils.MD5(linkToken))
|
|
|
+}
|
|
|
+
|
|
|
+// GetReportAuthToken
|
|
|
+// @Description: 获取报告token
|
|
|
+// @author: Roc
|
|
|
+// @datetime 2025-03-17 16:48:38
|
|
|
+// @param linkToken string
|
|
|
+// @return string
|
|
|
+func GetReportAuthToken(linkToken string) string {
|
|
|
+ key := getReportShareTokenKey(linkToken)
|
|
|
+ return utils.Rc.GetStr(key)
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+// getReportTokenKey
|
|
|
+// @Description:
|
|
|
+// @author: Roc
|
|
|
+// @datetime 2025-03-17 14:00:14
|
|
|
+// @param linkToken string
|
|
|
+// @return string
|
|
|
+func getReportTokenKey(token, source string) string {
|
|
|
+ return fmt.Sprint(utils.CACHE_REPORT_AUTH, source, token)
|
|
|
+}
|
|
|
+
|
|
|
// HandleReportContentStruct
|
|
|
// @Description: 处理内容组件的链接
|
|
|
// @author: Roc
|
|
@@ -2255,3 +2258,92 @@ func processMap(data map[string]interface{}, opType string, tokenMap map[string]
|
|
|
}
|
|
|
return nil
|
|
|
}
|
|
|
+
|
|
|
+// GetReportShareUrlToken 获取报告分享链接token
|
|
|
+func GetReportShareUrlToken(req models.ReportShartUrlReq, adminId int) (linkToken string, err error) {
|
|
|
+ defer func() {
|
|
|
+ if err == nil && linkToken != `` {
|
|
|
+ GeneralReportToken(linkToken, req.ReportId)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ cacheLinkKey := utils.CACHE_REPORT_SHARE_SHORT_Url + strconv.Itoa(req.ReportId) + "userId:" + strconv.Itoa(adminId)
|
|
|
+ linkToken, _ = utils.Rc.RedisString(cacheLinkKey)
|
|
|
+ if linkToken != "" && utils.Rc.IsExist(fmt.Sprint(utils.CACHE_REPORT_SHARE_ORIGIN_Url, utils.MD5(linkToken))) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var tokenKey string
|
|
|
+
|
|
|
+ var ok bool
|
|
|
+ // 冲突检测
|
|
|
+ for i := 0; i < 3; i++ {
|
|
|
+ linkToken = req.Url
|
|
|
+ if i > 0 {
|
|
|
+ linkToken += "_" + utils.GetRandDigit(3)
|
|
|
+ }
|
|
|
+ hashUrl := utils.MurmurHash64([]byte(linkToken))
|
|
|
+ linkToken = utils.ConvertNumToBase62(hashUrl)
|
|
|
+ // 拼上报告标题
|
|
|
+ //linkToken = fmt.Sprintf("%s %s", linkToken, req.Title)
|
|
|
+
|
|
|
+ tokenKey = fmt.Sprint(utils.CACHE_REPORT_SHARE_ORIGIN_Url, utils.MD5(linkToken))
|
|
|
+ ok = utils.Rc.IsExist(tokenKey)
|
|
|
+ if !ok {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !ok {
|
|
|
+ after := time.Now().AddDate(0, 0, 7)
|
|
|
+ err = utils.Rc.Put(cacheLinkKey, linkToken, time.Until(after))
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ err = utils.Rc.Put(tokenKey, req.Url, time.Until(after))
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ linkToken = ""
|
|
|
+ err = errors.New("生成链接失败")
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func TransfromToOriginUrl(linkToken string) (originLink string, msg string, err error) {
|
|
|
+ cacheLinkKey := fmt.Sprint(utils.CACHE_REPORT_SHARE_ORIGIN_Url, utils.MD5(linkToken))
|
|
|
+ originLink, err = utils.Rc.RedisString(cacheLinkKey)
|
|
|
+ if err != nil {
|
|
|
+ if err == redis.Nil {
|
|
|
+ msg = "链接已失效, 请重新获取"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ msg = "获取链接失败"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if originLink == "" {
|
|
|
+ msg = "链接已失效, 请重新获取"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ reportToken := GetReportAuthToken(linkToken)
|
|
|
+ if reportToken != "" {
|
|
|
+ originLink += `&authToken=` + reportToken
|
|
|
+ }
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func FilterShareUrl() web.FilterFunc {
|
|
|
+ return func(c *context.Context) {
|
|
|
+ path := c.Input.Context.Request.URL.Path
|
|
|
+ tokenArr := strings.Split(path, "/")
|
|
|
+ token := tokenArr[len(tokenArr)-1]
|
|
|
+
|
|
|
+ newPath := "/adminapi/report/share/link"
|
|
|
+ q := c.Input.Context.Request.URL.Query()
|
|
|
+ q.Add("Token", token)
|
|
|
+ c.Input.Context.Request.URL.Path = newPath
|
|
|
+ c.Input.Context.Request.URL.RawQuery = q.Encode()
|
|
|
+
|
|
|
+ utils.ApiLog.Info(fmt.Sprintf("原始请求为:%s, 已修改请求路径为:%s?%s", path, newPath, q.Encode()))
|
|
|
+ }
|
|
|
+}
|