@@ -79,9 +79,16 @@ func (self FeedLogic) FindTop(ctx context.Context) []*model.Feed {
79
79
return self .fillOtherInfo (ctx , feeds , false )
80
80
}
81
81
82
- // AutoUpdateSeq 每天自动更新一次动态的排序 (校准)
82
+ // AutoUpdateSeq 自动更新动态的排序 (校准)
83
83
func (self FeedLogic ) AutoUpdateSeq () {
84
- feedDay := config .ConfigFile .MustInt ("feed" , "day" , 7 )
84
+ curHour := time .Now ().Hour ()
85
+ if curHour < 7 {
86
+ return
87
+ }
88
+
89
+ feedDay := config .ConfigFile .MustInt ("feed" , "day" , 3 )
90
+ cmtWeight := config .ConfigFile .MustInt ("feed" , "cmt_weight" , 80 )
91
+ viewWeight := config .ConfigFile .MustInt ("feed" , "view_weight" , 80 )
85
92
86
93
var err error
87
94
offset , limit := 0 , 100
@@ -99,7 +106,11 @@ func (self FeedLogic) AutoUpdateSeq() {
99
106
continue
100
107
}
101
108
109
+ // 当天(不到24小时)发布的,不降
102
110
elapse := int (time .Now ().Sub (time .Time (feed .CreatedAt )).Hours ())
111
+ if elapse < 24 {
112
+ continue
113
+ }
103
114
104
115
if feed .Uid > 0 {
105
116
user := DefaultUser .FindOne (nil , "uid" , feed .Uid )
@@ -110,7 +121,7 @@ func (self FeedLogic) AutoUpdateSeq() {
110
121
111
122
seq := 0
112
123
if elapse <= feedDay * 24 {
113
- seq = feed . Seq - elapse
124
+ seq = self . calcChangeSeq ( feed , cmtWeight , viewWeight )
114
125
}
115
126
116
127
MasterDB .Table (new (model.Feed )).Where ("id=?" , feed .Id ).Update (map [string ]interface {}{
@@ -121,6 +132,54 @@ func (self FeedLogic) AutoUpdateSeq() {
121
132
}
122
133
}
123
134
135
+ func (self FeedLogic ) calcChangeSeq (feed * model.Feed , cmtWeight int , viewWeight int ) int {
136
+ seq := 0
137
+
138
+ // 最近有评论(时间更新)的,降 1/10 个评论数
139
+ if int (time .Now ().Sub (time .Time (feed .UpdatedAt )).Hours ()) < 1 {
140
+ seq = feed .Seq - cmtWeight / 10
141
+ } else {
142
+ // 最近有没有其他变动(赞、阅读等)
143
+ var updatedAt time.Time
144
+ switch feed .Objtype {
145
+ case model .TypeTopic :
146
+ topicEx := & model.TopicEx {}
147
+ MasterDB .Where ("tid=?" , feed .Objid ).Get (topicEx )
148
+ updatedAt = topicEx .Mtime
149
+ case model .TypeArticle :
150
+ article := & model.Article {}
151
+ MasterDB .ID (feed .Objid ).Get (article )
152
+ updatedAt = time .Time (article .Mtime )
153
+ case model .TypeResource :
154
+ resourceEx := & model.ResourceEx {}
155
+ MasterDB .ID (feed .Objid ).Get (resourceEx )
156
+ updatedAt = resourceEx .Mtime
157
+ case model .TypeProject :
158
+ project := & model.OpenProject {}
159
+ MasterDB .ID (feed .Objid ).Get (project )
160
+ updatedAt = time .Time (project .Mtime )
161
+ case model .TypeBook :
162
+ book := & model.Book {}
163
+ MasterDB .ID (feed .Objid ).Get (book )
164
+ updatedAt = time .Time (book .UpdatedAt )
165
+ }
166
+
167
+ dynamicElapse := int (time .Now ().Sub (updatedAt ).Hours ())
168
+
169
+ if dynamicElapse < 1 {
170
+ seq = feed .Seq - viewWeight
171
+ } else {
172
+ seq = feed .Seq / 2
173
+ }
174
+ }
175
+
176
+ if seq < 20 {
177
+ seq = 20
178
+ }
179
+
180
+ return seq
181
+ }
182
+
124
183
func (FeedLogic ) fillOtherInfo (ctx context.Context , feeds []* model.Feed , filterTop bool ) []* model.Feed {
125
184
newFeeds := make ([]* model.Feed , 0 , len (feeds ))
126
185
@@ -196,7 +255,7 @@ func (self FeedLogic) updateSeq(objid, objtype, cmtnum, likenum, viewnum int) {
196
255
return
197
256
}
198
257
199
- feedDay := config .ConfigFile .MustInt ("feed" , "day" , 7 )
258
+ feedDay := config .ConfigFile .MustInt ("feed" , "day" , 3 )
200
259
elapse := int (time .Now ().Sub (time .Time (feed .CreatedAt )).Hours ())
201
260
202
261
if feed .Uid > 0 {
0 commit comments