github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/task/constants/task.go (about)

     1  package constants
     2  
     3  import (
     4  	"time"
     5  	"fmt"
     6  )
     7  
     8  type Task struct {
     9  	ID         string    `json:"id"`
    10  	Channel    string    `json:"channel"`
    11  	Subject    string    `json:"subject"`
    12  	Data       []byte    `json:"data,omitempty"`
    13  	CreateTime time.Time `json:"createTime"`
    14  }
    15  
    16  func (t *Task) Init() *TaskFeedback {
    17  	return &TaskFeedback{
    18  		ID:         t.ID,
    19  		Channel:    t.Channel,
    20  		Subject:    t.Subject,
    21  		Data:       t.Data,
    22  		Status:     TASK_STATUS__INIT,
    23  	}
    24  }
    25  
    26  func (t *Task) Pending() *TaskFeedback {
    27  	return &TaskFeedback{
    28  		ID:         t.ID,
    29  		Channel:    t.Channel,
    30  		Subject:    t.Subject,
    31  		Status:     TASK_STATUS__PENGDING,
    32  		UpdateTime: time.Now(),
    33  	}
    34  }
    35  
    36  func (t *Task) Processing() *TaskFeedback {
    37  	return &TaskFeedback{
    38  		ID:         t.ID,
    39  		Channel:    t.Channel,
    40  		Subject:    t.Subject,
    41  		Status:     TASK_STATUS__PROCESSING,
    42  		UpdateTime: time.Now(),
    43  	}
    44  }
    45  
    46  func (t *Task) Success(result interface{}) *TaskFeedback {
    47  	return &TaskFeedback{
    48  		ID:         t.ID,
    49  		Channel:    t.Channel,
    50  		Subject:    t.Subject,
    51  		Status:     TASK_STATUS__SUCCESS,
    52  		UpdateTime: time.Now(),
    53  		Result:     []byte(fmt.Sprintf("%+v", result)),
    54  	}
    55  }
    56  
    57  func (t *Task) Fail(err error) *TaskFeedback {
    58  	return &TaskFeedback{
    59  		ID:         t.ID,
    60  		Channel:    t.Channel,
    61  		Subject:    t.Subject,
    62  		Status:     TASK_STATUS__FAIL,
    63  		UpdateTime: time.Now(),
    64  		ErrorTrace: []byte(fmt.Sprintf("%v", err)),
    65  	}
    66  }
    67  
    68  func (t *Task) Rollback(err error) *TaskFeedback {
    69  	return &TaskFeedback{
    70  		ID:         t.ID,
    71  		Channel:    t.Channel,
    72  		Subject:    t.Subject,
    73  		Status:     TASK_STATUS__ROLLBACK,
    74  		UpdateTime: time.Now(),
    75  		ErrorTrace: []byte(fmt.Sprintf("%v", err)),
    76  	}
    77  }
    78  
    79  type TaskFeedback struct {
    80  	ID         string     `json:"id"`
    81  	Channel    string     `json:"channel"`
    82  	Subject    string     `json:"subject"`
    83  	Data       []byte     `json:"data,omitempty"`
    84  	Status     TaskStatus `json:"status"`
    85  	UpdateTime time.Time  `json:"updateTime"`
    86  	Result     []byte     `json:"result,omitempty"`
    87  	ErrorTrace []byte     `json:"errorTrace,omitempty"`
    88  }