|
@@ -4,10 +4,13 @@ import (
|
|
|
"errors"
|
|
|
logger "eta/eta_mini_ht_api/common/component/log"
|
|
|
userDao "eta/eta_mini_ht_api/models/user"
|
|
|
+ "fmt"
|
|
|
+ "time"
|
|
|
)
|
|
|
|
|
|
type RecordCountDTO struct {
|
|
|
UserId int
|
|
|
+ TraceId string
|
|
|
Mobile string
|
|
|
SourceId int
|
|
|
SourceType userDao.SourceType
|
|
@@ -32,10 +35,27 @@ func getSourceType(mediaType string) userDao.SourceType {
|
|
|
return ""
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-func CountReport(record RecordCountDTO) (err error) {
|
|
|
+func generateTraceId(productType string) string {
|
|
|
+ return fmt.Sprintf("%s%d", productType, time.Now().UnixNano())
|
|
|
+}
|
|
|
+func CountReport(record RecordCountDTO) (traceId string, err error) {
|
|
|
dao := convertUserToReportFlow(record)
|
|
|
- err = userDao.CountSourceClicks(dao)
|
|
|
+ if dao.TraceId == "" {
|
|
|
+ traceId = generateTraceId(string(dao.SourceType))
|
|
|
+ dao.TraceId = traceId
|
|
|
+ err = userDao.CountSourceClicks(dao)
|
|
|
+ } else {
|
|
|
+ var dbRecord userDao.UserSourceClickFlow
|
|
|
+ dbRecord, err = userDao.GetClickRecordByTraceId(dao.TraceId)
|
|
|
+ traceId = dbRecord.TraceId
|
|
|
+ if err != nil {
|
|
|
+ logger.Error("更新用户研报点击记录失败:%v", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ currTime := time.Now()
|
|
|
+ dbRecord.ReadDurationSeconds = currTime.Sub(dbRecord.ClickTime).Milliseconds()
|
|
|
+ err = userDao.UpdateSourceClicks(dbRecord)
|
|
|
+ }
|
|
|
if err != nil {
|
|
|
logger.Error("插入用户研报点击记录失败:%v", err)
|
|
|
return
|
|
@@ -44,7 +64,7 @@ func CountReport(record RecordCountDTO) (err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-func CountMedia(record RecordCountDTO, mediaType string) (err error) {
|
|
|
+func CountMedia(record RecordCountDTO, mediaType string) (traceId string, err error) {
|
|
|
sourceType := getSourceType(mediaType)
|
|
|
if sourceType == "" {
|
|
|
logger.Error("媒体类型错误,%s", mediaType)
|
|
@@ -53,7 +73,22 @@ func CountMedia(record RecordCountDTO, mediaType string) (err error) {
|
|
|
}
|
|
|
record.SourceType = sourceType
|
|
|
dao := convertUserToMediaFlow(record)
|
|
|
- err = userDao.CountSourceClicks(dao)
|
|
|
+ if dao.TraceId == "" {
|
|
|
+ traceId = generateTraceId(string(dao.SourceType))
|
|
|
+ dao.TraceId = traceId
|
|
|
+ err = userDao.CountSourceClicks(dao)
|
|
|
+ } else {
|
|
|
+ var dbRecord userDao.UserSourceClickFlow
|
|
|
+ dbRecord, err = userDao.GetClickRecordByTraceId(dao.TraceId)
|
|
|
+ traceId = dbRecord.TraceId
|
|
|
+ if err != nil {
|
|
|
+ logger.Error("更新用户研报点击记录失败:%v", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ currTime := time.Now()
|
|
|
+ dbRecord.ReadDurationSeconds = currTime.Sub(dbRecord.ClickTime).Milliseconds()
|
|
|
+ err = userDao.UpdateSourceClicks(dbRecord)
|
|
|
+ }
|
|
|
if err != nil {
|
|
|
logger.Error("插入用户媒体点击记录失败:%v", err)
|
|
|
return
|
|
@@ -81,21 +116,23 @@ func GetHotReports(begin string, end string, limit int) (dtoList []HotReportDTO)
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
-func convertUserToReportFlow(report RecordCountDTO) userDao.UserSourceClickFlow {
|
|
|
+func convertUserToReportFlow(record RecordCountDTO) userDao.UserSourceClickFlow {
|
|
|
return userDao.UserSourceClickFlow{
|
|
|
- UserID: report.UserId,
|
|
|
- Mobile: report.Mobile,
|
|
|
- SourceId: report.SourceId,
|
|
|
+ UserID: record.UserId,
|
|
|
+ Mobile: record.Mobile,
|
|
|
+ SourceId: record.SourceId,
|
|
|
+ TraceId: record.TraceId,
|
|
|
SourceType: userDao.ReportSourceType,
|
|
|
- IPAddress: report.IpAddress,
|
|
|
- Location: report.Location,
|
|
|
- Referer: report.Referer,
|
|
|
- AdditionalData: report.Additional,
|
|
|
+ IPAddress: record.IpAddress,
|
|
|
+ Location: record.Location,
|
|
|
+ Referer: record.Referer,
|
|
|
+ AdditionalData: record.Additional,
|
|
|
}
|
|
|
}
|
|
|
func convertUserToMediaFlow(media RecordCountDTO) userDao.UserSourceClickFlow {
|
|
|
return userDao.UserSourceClickFlow{
|
|
|
UserID: media.UserId,
|
|
|
+ TraceId: media.TraceId,
|
|
|
Mobile: media.Mobile,
|
|
|
SourceId: media.SourceId,
|
|
|
SourceType: media.SourceType,
|