fix media supply citation attribution
Desktop Client Build / Resolve Build Metadata (push) Successful in 26s
Frontend CI / Frontend (push) Successful in 2m53s
Backend CI / Backend (push) Successful in 16m37s
Desktop Client Build / Build Desktop Client (push) Successful in 23m40s
Desktop Client Build / Publish Client Artifacts to NAS (push) Successful in 28s
Desktop Client Build / Resolve Build Metadata (push) Successful in 26s
Frontend CI / Frontend (push) Successful in 2m53s
Backend CI / Backend (push) Successful in 16m37s
Desktop Client Build / Build Desktop Client (push) Successful in 23m40s
Desktop Client Build / Publish Client Artifacts to NAS (push) Successful in 28s
This commit is contained in:
@@ -3733,9 +3733,9 @@ func (s *MonitoringService) loadCitedArticleSourceMeta(ctx context.Context, tena
|
||||
manualIDs := make([]int64, 0, len(sources))
|
||||
for _, source := range sources {
|
||||
switch source.SourceType {
|
||||
case "published_article":
|
||||
case monitoringContentSourcePublishedArticle:
|
||||
publishedIDs = append(publishedIDs, source.SourceID)
|
||||
case "manual_mark":
|
||||
case monitoringContentSourceManualMark:
|
||||
manualIDs = append(manualIDs, source.SourceID)
|
||||
}
|
||||
}
|
||||
@@ -3766,7 +3766,7 @@ func (s *MonitoringService) loadCitedArticleSourceMeta(ctx context.Context, tena
|
||||
item.ArticleID = &value
|
||||
item.ArticleTitle = repairMonitoringMojibake(item.ArticleTitle)
|
||||
item.PublishPlatform = repairMonitoringMojibake(item.PublishPlatform)
|
||||
item.SourceType = "published_article"
|
||||
item.SourceType = monitoringContentSourcePublishedArticle
|
||||
item.SourceID = articleID
|
||||
result[monitoringContentSourceKey(item.SourceType, item.SourceID)] = item
|
||||
}
|
||||
@@ -3796,13 +3796,68 @@ func (s *MonitoringService) loadCitedArticleSourceMeta(ctx context.Context, tena
|
||||
}
|
||||
item.ArticleTitle = repairMonitoringMojibake(item.ArticleTitle)
|
||||
item.PublishPlatform = repairMonitoringMojibake(item.PublishPlatform)
|
||||
item.SourceType = "manual_mark"
|
||||
item.SourceType = monitoringContentSourceManualMark
|
||||
result[monitoringContentSourceKey(item.SourceType, item.SourceID)] = item
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, response.ErrInternal(50041, "scan_failed", "failed to iterate marked article metadata")
|
||||
}
|
||||
}
|
||||
mediaItems, err := s.loadMediaSupplyCitedArticleSourceMeta(ctx, tenantID, sources)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for key, item := range mediaItems {
|
||||
result[key] = item
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (s *MonitoringService) loadMediaSupplyCitedArticleSourceMeta(ctx context.Context, tenantID int64, sources []monitoringCitedArticleSourceRow) (map[string]MonitoringCitedArticle, error) {
|
||||
result := make(map[string]MonitoringCitedArticle)
|
||||
mediaItemIDs := make([]int64, 0, len(sources))
|
||||
for _, source := range sources {
|
||||
if source.SourceType == monitoringContentSourceMediaSupplyOrderItem {
|
||||
mediaItemIDs = append(mediaItemIDs, source.SourceID)
|
||||
}
|
||||
}
|
||||
if len(mediaItemIDs) == 0 {
|
||||
return result, nil
|
||||
}
|
||||
|
||||
rows, err := s.businessPool.Query(ctx, `
|
||||
SELECT
|
||||
i.id,
|
||||
o.article_id,
|
||||
COALESCE(NULLIF(o.title, ''), NULLIF(i.resource_name_snapshot, ''), '未命名文章') AS article_title,
|
||||
COALESCE(NULLIF(i.resource_name_snapshot, ''), $3) AS publish_platform,
|
||||
i.external_article_url
|
||||
FROM media_supply_order_items i
|
||||
JOIN media_supply_orders o ON o.id = i.order_id
|
||||
WHERE o.tenant_id = $1
|
||||
AND i.id = ANY($2)
|
||||
AND o.deleted_at IS NULL
|
||||
`, tenantID, mediaItemIDs, monitoringMediaSupplySubmissionCitationLabel)
|
||||
if err != nil {
|
||||
return nil, response.ErrInternal(50041, "query_failed", "failed to load media supply citation metadata")
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
for rows.Next() {
|
||||
var item MonitoringCitedArticle
|
||||
var articleID sql.NullInt64
|
||||
if scanErr := rows.Scan(&item.SourceID, &articleID, &item.ArticleTitle, &item.PublishPlatform, &item.SourceURL); scanErr != nil {
|
||||
return nil, response.ErrInternal(50041, "scan_failed", "failed to parse media supply citation metadata")
|
||||
}
|
||||
item.ArticleID = nullableInt64Value(articleID)
|
||||
item.ArticleTitle = repairMonitoringMojibake(item.ArticleTitle)
|
||||
item.PublishPlatform = repairMonitoringMojibake(item.PublishPlatform)
|
||||
item.SourceType = monitoringContentSourceMediaSupplyOrderItem
|
||||
result[monitoringContentSourceKey(item.SourceType, item.SourceID)] = item
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, response.ErrInternal(50041, "scan_failed", "failed to iterate media supply citation metadata")
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
@@ -4012,7 +4067,7 @@ func (s *MonitoringService) loadCitationsForRuns(ctx context.Context, tenantID i
|
||||
return result, nil
|
||||
}
|
||||
|
||||
aliasIndex, err := loadMonitoringPublishedAliasIndex(ctx, s.monitoringPool, tenantID)
|
||||
aliasIndex, err := loadMonitoringPublishedAliasIndex(ctx, s.monitoringPool, s.businessPool, tenantID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -4120,7 +4175,7 @@ func (s *MonitoringService) loadCitationsForRuns(ctx context.Context, tenantID i
|
||||
articleTitle = &title
|
||||
aliasSourceType := strings.TrimSpace(alias.SourceType)
|
||||
if aliasSourceType == "" {
|
||||
aliasSourceType = "published_article"
|
||||
aliasSourceType = monitoringContentSourcePublishedArticle
|
||||
}
|
||||
sourceType = &aliasSourceType
|
||||
aliasSourceID := alias.SourceID
|
||||
|
||||
Reference in New Issue
Block a user