1. 修复BUG,项目更新截止时间时,未同步更新表node_task中的任务时间!
正在显示
1 个修改的文件
包含
61 行增加
和
56 行删除
@@ -155,79 +155,28 @@ func (rs *EvaluationProjectService) UpdateTemplate(in *command.UpdateProjectTemp | @@ -155,79 +155,28 @@ func (rs *EvaluationProjectService) UpdateTemplate(in *command.UpdateProjectTemp | ||
155 | if end.After(maxTime) { | 155 | if end.After(maxTime) { |
156 | return nil, application.ThrowError(application.BUSINESS_ERROR, "评估截至时间不能超出周期截至时间") | 156 | return nil, application.ThrowError(application.BUSINESS_ERROR, "评估截至时间不能超出周期截至时间") |
157 | } | 157 | } |
158 | + // 更新项目模板中的环节时间 | ||
158 | if project.Template != nil { | 159 | if project.Template != nil { |
159 | for i := range project.Template.LinkNodes { | 160 | for i := range project.Template.LinkNodes { |
160 | node := project.Template.LinkNodes[i] | 161 | node := project.Template.LinkNodes[i] |
161 | node.TimeEnd = &end | 162 | node.TimeEnd = &end |
162 | } | 163 | } |
163 | } | 164 | } |
164 | - // 项目起始截止时间(暂时环节中的时间未分开) | 165 | + // 更新项目截止时间(暂时环节中的时间未分开) |
165 | project.EndTime = end | 166 | project.EndTime = end |
166 | project, err = projectRepository.Insert(project) | 167 | project, err = projectRepository.Insert(project) |
167 | if err != nil { | 168 | if err != nil { |
168 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 169 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
169 | } | 170 | } |
170 | - | ||
171 | - // 查看任务过程,重新日计算任务截至期 | ||
172 | - taskRepository := factory.CreateNodeTaskRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
173 | - tasks, err := taskRepository.Find(map[string]interface{}{"projectId": in.Id}) | ||
174 | - if err != nil { | ||
175 | - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
176 | - } | ||
177 | - | ||
178 | - now := time.Now().Local() | ||
179 | - year, month, day := now.Date() | ||
180 | - nowO := time.Date(year, month, day, 0, 0, 0, 0, time.Local) // 当前时间0点0分0秒时刻 | ||
181 | - | ||
182 | - for i := range tasks { | ||
183 | - task := tasks[i] | ||
184 | - task.TimeEnd = &end | ||
185 | - | ||
186 | - // 重新计算 | ||
187 | - if task.NextSentAt == nil { | ||
188 | - // 环节起始和截止本地时间 | ||
189 | - startLocal := task.TimeStart.Local() | ||
190 | - sY, sM, sD := startLocal.Date() | ||
191 | - startLocal = time.Date(sY, sM, sD, 0, 0, 0, 0, time.Local) // 开始时间以0点开始计算 | ||
192 | - endLocal := task.TimeEnd.Local() | ||
193 | - | ||
194 | - // 在当前时间之前,则计算下一个周期时间 | ||
195 | - if startLocal.Before(nowO) { | ||
196 | - nextTime := utils.NextTime(nowO, startLocal, task.KpiCycle) | ||
197 | - task.NextSentAt = &nextTime | ||
198 | - } else { | ||
199 | - task.NextSentAt = &startLocal | ||
200 | - } | ||
201 | - | ||
202 | - // 注.最后一次发送时间和重新计算后的时间相同时,继续获取下一个周期 | ||
203 | - if task.LastSentAt != nil { | ||
204 | - nextY, nextM, nextD := task.NextSentAt.Local().Date() | ||
205 | - lastY, lastM, lastD := task.LastSentAt.Local().Date() | ||
206 | - if nextY == lastY && nextM == lastM && nextD == lastD { | ||
207 | - nextTime := utils.NextTimeInc(task.NextSentAt.Local(), task.KpiCycle) | ||
208 | - task.NextSentAt = &nextTime | ||
209 | - } | ||
210 | - } | ||
211 | - | ||
212 | - // 如果超出截至时间,则周期置空 | ||
213 | - if task.NextSentAt.After(endLocal) { | ||
214 | - task.NextSentAt = nil | ||
215 | - } | ||
216 | - } else { | ||
217 | - // 新的截止时间在下一次发送周期任务之前,则结束 | ||
218 | - if end.Before(task.NextSentAt.Local()) { | ||
219 | - task.NextSentAt = nil | ||
220 | - } else { | ||
221 | - // do nothing | ||
222 | - } | ||
223 | - } | 171 | + // 项目调整截止时间,同步更新任务时间 |
172 | + if err := rs.updateTaskTime(transactionContext, in.Id, end); err != nil { | ||
173 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
224 | } | 174 | } |
225 | 175 | ||
226 | if err := transactionContext.CommitTransaction(); err != nil { | 176 | if err := transactionContext.CommitTransaction(); err != nil { |
227 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 177 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
228 | } | 178 | } |
229 | return project, nil | 179 | return project, nil |
230 | - | ||
231 | } else { | 180 | } else { |
232 | _, projects, err := projectRepository.Find(map[string]interface{}{"companyId": in.CompanyId, "cycleId": in.CycleId}, "template") | 181 | _, projects, err := projectRepository.Find(map[string]interface{}{"companyId": in.CompanyId, "cycleId": in.CycleId}, "template") |
233 | if err != nil { | 182 | if err != nil { |
@@ -314,6 +263,62 @@ func (rs *EvaluationProjectService) UpdateTemplate(in *command.UpdateProjectTemp | @@ -314,6 +263,62 @@ func (rs *EvaluationProjectService) UpdateTemplate(in *command.UpdateProjectTemp | ||
314 | } | 263 | } |
315 | } | 264 | } |
316 | 265 | ||
266 | +// 更新项目截止时间,同步任务截止时间 | ||
267 | +func (rs *EvaluationProjectService) updateTaskTime(context application.TransactionContext, projectId int64, end time.Time) error { | ||
268 | + // 查看任务过程,重新日计算任务截至期 | ||
269 | + taskRepository := factory.CreateNodeTaskRepository(map[string]interface{}{"transactionContext": context}) | ||
270 | + tasks, err := taskRepository.Find(map[string]interface{}{"projectId": projectId}) | ||
271 | + if err != nil { | ||
272 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
273 | + } | ||
274 | + | ||
275 | + now := time.Now().Local() | ||
276 | + year, month, day := now.Date() | ||
277 | + nowO := time.Date(year, month, day, 0, 0, 0, 0, time.Local) // 当前时间0点0分0秒时刻 | ||
278 | + | ||
279 | + for i := range tasks { | ||
280 | + task := tasks[i] | ||
281 | + task.TimeEnd = &end // 先赋值 | ||
282 | + | ||
283 | + if task.NextSentAt == nil { // 重新计算 | ||
284 | + // 环节起始和截止本地时间 | ||
285 | + startLocal := task.TimeStart.Local() | ||
286 | + sY, sM, sD := startLocal.Date() | ||
287 | + startLocal = time.Date(sY, sM, sD, 0, 0, 0, 0, time.Local) // 开始时间以0点开始计算 | ||
288 | + | ||
289 | + // 在当前时间之前,则计算下一个周期时间 | ||
290 | + if startLocal.Before(nowO) { | ||
291 | + nextTime := utils.NextTime(nowO, startLocal, task.KpiCycle) | ||
292 | + task.NextSentAt = &nextTime | ||
293 | + } else { | ||
294 | + task.NextSentAt = &startLocal | ||
295 | + } | ||
296 | + | ||
297 | + // 注.最后一次发送时间和重新计算后的时间相同时,继续获取下一个周期 | ||
298 | + if task.LastSentAt != nil { | ||
299 | + nextY, nextM, nextD := task.NextSentAt.Local().Date() | ||
300 | + lastY, lastM, lastD := task.LastSentAt.Local().Date() | ||
301 | + if nextY == lastY && nextM == lastM && nextD == lastD { | ||
302 | + nextTime := utils.NextTimeInc(task.NextSentAt.Local(), task.KpiCycle) | ||
303 | + task.NextSentAt = &nextTime | ||
304 | + } | ||
305 | + } | ||
306 | + } | ||
307 | + | ||
308 | + // 如果超出截至时间,则周期置空 | ||
309 | + if task.NextSentAt.Local().After(task.TimeEnd.Local()) { | ||
310 | + task.NextSentAt = nil | ||
311 | + } | ||
312 | + | ||
313 | + // 更新任务 | ||
314 | + task, err := taskRepository.Insert(task) | ||
315 | + if err != nil { | ||
316 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
317 | + } | ||
318 | + } | ||
319 | + return nil | ||
320 | +} | ||
321 | + | ||
317 | func (rs *EvaluationProjectService) Get(in *command.GetProjectCommand) (interface{}, error) { | 322 | func (rs *EvaluationProjectService) Get(in *command.GetProjectCommand) (interface{}, error) { |
318 | transactionContext, err := factory.ValidateStartTransaction(in) | 323 | transactionContext, err := factory.ValidateStartTransaction(in) |
319 | if err != nil { | 324 | if err != nil { |
-
请 注册 或 登录 后发表评论