task_anomaly.go
3.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package domain
import (
"fmt"
"strconv"
"time"
"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/utils/xtime"
)
// 任务的异常记录
type TaskAnomaly struct {
Id int
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
CompanyId int `json:"companyId,string"`
TaskId int `json:"taskId,string"` // 任务id
TaskRecordId int `json:"taskRecordId,string"` // 任务反馈的进度
Category int `json:"category"` // 异常记录的分类 1 里程碑异常;2反馈异常 ;3 辅导异常
CurrentStage TaskStage `json:"currentStage"` // 计划进度的里程碑
LastStage TaskStage `json:"lastStage"` // 实际进度完成的里程碑
TaskStageCheck TaskStage `json:"taskStageCheck"` // 当天任务反馈操作里程碑记录
AssessFlag int `json:"anomaly"` // 异常反馈的次数
WarnFlag int `json:"warnFlag"` // 里程碑异常次数
AssistFlag int `json:"assistFlag"` // 辅导异常次数
IsLast int `json:"isLast"` // 是否是最新的一条记录 1 是最新的记录 2 不是最新的记录
RecordBegin int64 `json:"recordBegin"` // 异常记录的开始时间
NoticeWho []map[string]string `json:"noticeWho"` // 异常记录消息通知的人
Marks map[string]string `json:"marks"` // 已经操作的标记
}
// 已点击“去更新”
func (t *TaskAnomaly) MarkA() {
t.Marks["a"] = "已更新"
}
// 已点击 "去反馈"
func (t *TaskAnomaly) MarkB() {
t.Marks["b"] = "已反馈"
}
// 已点击 "找上级"
func (t *TaskAnomaly) MarkC() {
t.Marks["c"] = "已求助"
}
// 已点击 "去辅导"
func (t *TaskAnomaly) MarkD() {
t.Marks["d"] = "已辅导"
}
func (t *TaskAnomaly) SetNoticeWho(u *User) {
t.NoticeWho = append(t.NoticeWho, map[string]string{
"id": strconv.Itoa(int(u.Id)), "name": u.Name,
})
}
// 异常状况描述
func (t *TaskAnomaly) AnomalyDesc() (str string) {
nowTime := time.Now()
switch t.Category {
case 1:
//里程碑异常
{
if t.TaskStageCheck.RealCompletedAt == 0 {
//逾期未完成
planCompletedAt := time.Unix(t.TaskStageCheck.PlanCompletedAt, 0)
subDay := xtime.SubDayAbs(nowTime, planCompletedAt)
str = fmt.Sprintf("里程碑%s已逾期%d天", t.TaskStageCheck.Name, subDay)
} else {
//逾期完成
planCompletedAt := time.Unix(t.TaskStageCheck.PlanCompletedAt, 0)
realCompletedAt := time.Unix(t.TaskStageCheck.RealCompletedAt, 0)
subDay := xtime.SubDayAbs(realCompletedAt, planCompletedAt)
str = fmt.Sprintf("里程碑%s逾期%d天完成", t.TaskStageCheck.Name, subDay)
}
}
case 2:
//反馈异常
{
recordBegin := time.Unix(t.RecordBegin, 0)
subDay := xtime.SubDayAbs(nowTime, recordBegin)
str = fmt.Sprintf(
"本任务自%s未正常反馈项目进度,已异常%d天",
recordBegin.Local().Format("2006-01-02"),
subDay,
)
}
case 3:
// 辅导异常
{
recordBegin := time.Unix(t.RecordBegin, 0)
subDay := xtime.SubDayAbs(nowTime, recordBegin)
str = fmt.Sprintf(
"本任务计划于%s完成辅导,已逾期%d天",
recordBegin.Local().Format("2006-01-02"),
subDay,
)
}
}
return str
}
// 发送异常后的天数
func (t *TaskAnomaly) CountAnomalyDay() int {
t1 := t.CreatedAt
t2 := time.Unix(t.RecordBegin, 0)
return xtime.SubDayAbs(t1, t2)
}
// 存储
type TaskAnomalyRepository interface {
Save(param *TaskAnomaly) error
FindOne(queryOptions map[string]interface{}) (*TaskAnomaly, error)
Find(queryOptions map[string]interface{}) (int, []*TaskAnomaly, error)
}