作者 郑周

1. 优化定时时间,在项目周期截止当天,继续编辑保存当天截止时间,会有重复任务发送!

... ... @@ -187,8 +187,8 @@ func (rs *EvaluationProjectService) UpdateTemplate(in *command.UpdateProjectTemp
if task.NextSentAt == nil {
// 环节起始和截止本地时间
startLocal := task.TimeStart.Local()
sYear, sMonth, sDay := startLocal.Date()
startLocal = time.Date(sYear, sMonth, sDay, 0, 0, 0, 0, time.Local) // 开始时间以0点开始计算
sY, sM, sD := startLocal.Date()
startLocal = time.Date(sY, sM, sD, 0, 0, 0, 0, time.Local) // 开始时间以0点开始计算
endLocal := task.TimeEnd.Local()
// 在当前时间之前,则计算下一个周期时间
... ... @@ -198,6 +198,17 @@ func (rs *EvaluationProjectService) UpdateTemplate(in *command.UpdateProjectTemp
} else {
task.NextSentAt = &startLocal
}
// 注.最后一次发送时间和重新计算后的时间相同时,继续获取下一个周期
if task.LastSentAt != nil {
nextY, nextM, nextD := task.NextSentAt.Local().Date()
lastY, lastM, lastD := task.LastSentAt.Local().Date()
if nextY == lastY && nextM == lastM && nextD == lastD {
nextTime := utils.NextTimeInc(task.NextSentAt.Local(), task.KpiCycle)
task.NextSentAt = &nextTime
}
}
// 如果超出截至时间,则周期置空
if task.NextSentAt.After(endLocal) {
task.NextSentAt = nil
... ... @@ -483,8 +494,8 @@ func (rs *EvaluationProjectService) Activate(in *command.ActivateProjectCommand)
// 环节起始和截止本地时间
startLocal := task.TimeStart.Local()
sYear, sMonth, sDay := startLocal.Date()
startLocal = time.Date(sYear, sMonth, sDay, 0, 0, 0, 0, time.Local) // 开始时间以0点开始计算
sY, sM, sD := startLocal.Date()
startLocal = time.Date(sY, sM, sD, 0, 0, 0, 0, time.Local) // 开始时间以0点开始计算
endLocal := task.TimeEnd.Local()
// 在当前时间之前,则计算下一个周期时间
... ...
... ... @@ -79,6 +79,8 @@ func (rs *NodeTaskService) SendEvaluationNode() error {
}
staffAssessService := service.NewStaffAssessServeice()
now := time.Now().Local()
for i := range tasks {
task := tasks[i]
project, ok := projectIdsMap[task.ProjectId] // 项目
... ... @@ -86,6 +88,9 @@ func (rs *NodeTaskService) SendEvaluationNode() error {
// 环节截止时间
maxTime := task.TimeEnd.Local()
// 更新任务最后一次的发送时间(取当前时间)
task.LastSentAt = &now
// 当前周起始时间和截止时间
var cycleTimeStart = task.NextSentAt.Local()
var cycleTimeEnd time.Time
... ...
... ... @@ -18,6 +18,7 @@ type NodeTask struct {
TimeEnd *time.Time `json:"timeEnd" comment:"截至时间"`
KpiCycle int `json:"kpiCycle" comment:"考核周期(1日、2周、3月)"`
NextSentAt *time.Time `json:"nextSentAt" comment:"下一次发送时间"`
LastSentAt *time.Time `json:"lastSentAt" comment:"最后一次发送时间"`
CreatedAt time.Time `json:"createdAt" comment:"创建时间"`
UpdatedAt time.Time `json:"updatedAt" comment:"更新时间"`
DeletedAt *time.Time `json:"deletedAt" comment:"删除时间"`
... ...
... ... @@ -19,6 +19,7 @@ type NodeTask struct {
TimeEnd *time.Time `comment:"截至时间"`
KpiCycle int `comment:"考核周期(1日、2周、3月)"`
NextSentAt *time.Time `comment:"下一次发送时间"`
LastSentAt *time.Time `comment:"最后一次发送时间"`
CreatedAt time.Time `comment:"创建时间"`
UpdatedAt time.Time `comment:"更新时间"`
DeletedAt *time.Time `comment:"删除时间"`
... ...
... ... @@ -35,6 +35,7 @@ func (repo *NodeTaskRepository) TransformToDomain(m *models.NodeTask) domain.Nod
TimeEnd: m.TimeEnd,
KpiCycle: m.KpiCycle,
NextSentAt: m.NextSentAt,
LastSentAt: m.LastSentAt,
CreatedAt: m.CreatedAt.Local(),
UpdatedAt: m.UpdatedAt.Local(),
DeletedAt: m.DeletedAt,
... ... @@ -56,6 +57,7 @@ func (repo *NodeTaskRepository) TransformToModel(d *domain.NodeTask) models.Node
TimeEnd: d.TimeEnd,
KpiCycle: d.KpiCycle,
NextSentAt: d.NextSentAt,
LastSentAt: d.LastSentAt,
CreatedAt: d.CreatedAt,
UpdatedAt: d.UpdatedAt,
DeletedAt: d.DeletedAt,
... ...
ALTER TABLE "public"."node_task" ADD COLUMN "last_sent_at" timestamptz(6);
COMMENT ON COLUMN "public"."node_task"."last_sent_at" IS '最后一次发送时间';
\ No newline at end of file
... ...