消息
This commit is contained in:
parent
d46a07ffc1
commit
731fa60d73
|
|
@ -23,7 +23,7 @@ const ENV = {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 当前环境 - 开发时使用 development,打包时改为 production
|
// 当前环境 - 开发时使用 development,打包时改为 production
|
||||||
const CURRENT_ENV = 'production'
|
const CURRENT_ENV = 'development'
|
||||||
|
|
||||||
// 导出配置
|
// 导出配置
|
||||||
export const config = {
|
export const config = {
|
||||||
|
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
-- 清理 UserView 表中的重复记录
|
|
||||||
-- 保留每对用户(UserId + TargetUserId)的最新一条记录
|
|
||||||
|
|
||||||
-- 首先查看有多少重复记录
|
|
||||||
SELECT UserId, TargetUserId, COUNT(*) as cnt
|
|
||||||
FROM UserView
|
|
||||||
GROUP BY UserId, TargetUserId
|
|
||||||
HAVING COUNT(*) > 1;
|
|
||||||
|
|
||||||
-- 删除重复记录,保留 Id 最大的那条(即最新的)
|
|
||||||
DELETE FROM UserView
|
|
||||||
WHERE Id NOT IN (
|
|
||||||
SELECT MaxId FROM (
|
|
||||||
SELECT MAX(Id) as MaxId
|
|
||||||
FROM UserView
|
|
||||||
GROUP BY UserId, TargetUserId
|
|
||||||
) AS KeepRecords
|
|
||||||
);
|
|
||||||
|
|
||||||
-- 验证清理结果
|
|
||||||
SELECT UserId, TargetUserId, COUNT(*) as cnt
|
|
||||||
FROM UserView
|
|
||||||
GROUP BY UserId, TargetUserId
|
|
||||||
HAVING COUNT(*) > 1;
|
|
||||||
|
|
@ -789,22 +789,45 @@ public class InteractService : IInteractService
|
||||||
return new InteractCountsResponse();
|
return new InteractCountsResponse();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取用户最后查看各类互动的时间,如果为空则使用用户创建时间
|
// 如果用户从未查看过互动列表,初始化已读时间为当前时间
|
||||||
var lastViewedMeTime = user.LastViewedMeReadTime ?? user.CreateTime;
|
// 这样只统计从现在开始的新互动,避免历史数据一直显示未读
|
||||||
var lastFavoritedMeTime = user.LastFavoritedMeReadTime ?? user.CreateTime;
|
var needUpdate = false;
|
||||||
var lastUnlockedMeTime = user.LastUnlockedMeReadTime ?? user.CreateTime;
|
var now = DateTime.Now;
|
||||||
|
|
||||||
|
if (user.LastViewedMeReadTime == null)
|
||||||
|
{
|
||||||
|
user.LastViewedMeReadTime = now;
|
||||||
|
needUpdate = true;
|
||||||
|
}
|
||||||
|
if (user.LastFavoritedMeReadTime == null)
|
||||||
|
{
|
||||||
|
user.LastFavoritedMeReadTime = now;
|
||||||
|
needUpdate = true;
|
||||||
|
}
|
||||||
|
if (user.LastUnlockedMeReadTime == null)
|
||||||
|
{
|
||||||
|
user.LastUnlockedMeReadTime = now;
|
||||||
|
needUpdate = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (needUpdate)
|
||||||
|
{
|
||||||
|
user.UpdateTime = now;
|
||||||
|
await _userRepository.UpdateAsync(user);
|
||||||
|
_logger.LogInformation("初始化用户互动已读时间: UserId={UserId}", userId);
|
||||||
|
}
|
||||||
|
|
||||||
// 统计各类互动的新增数量
|
// 统计各类互动的新增数量
|
||||||
// 看过我:统计首次查看时间(CreateTime)在上次已读之后的新用户数量
|
// 看过我:统计首次查看时间(CreateTime)在上次已读之后的新用户数量
|
||||||
// 这样同一用户多次查看只计算一次(首次查看时)
|
// 这样同一用户多次查看只计算一次(首次查看时)
|
||||||
var viewedMeCount = await _viewRepository.CountAsync(v =>
|
var viewedMeCount = await _viewRepository.CountAsync(v =>
|
||||||
v.TargetUserId == userId && v.CreateTime > lastViewedMeTime);
|
v.TargetUserId == userId && v.CreateTime > user.LastViewedMeReadTime);
|
||||||
|
|
||||||
var favoritedMeCount = await _favoriteRepository.CountAsync(f =>
|
var favoritedMeCount = await _favoriteRepository.CountAsync(f =>
|
||||||
f.TargetUserId == userId && f.CreateTime > lastFavoritedMeTime);
|
f.TargetUserId == userId && f.CreateTime > user.LastFavoritedMeReadTime);
|
||||||
|
|
||||||
var unlockedMeCount = await _unlockRepository.CountAsync(u =>
|
var unlockedMeCount = await _unlockRepository.CountAsync(u =>
|
||||||
u.TargetUserId == userId && u.CreateTime > lastUnlockedMeTime);
|
u.TargetUserId == userId && u.CreateTime > user.LastUnlockedMeReadTime);
|
||||||
|
|
||||||
return new InteractCountsResponse
|
return new InteractCountsResponse
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user