62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
package model
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"encoding/hex"
|
|
"fmt"
|
|
"time"
|
|
|
|
"go-common/library/log"
|
|
"go-common/library/xstr"
|
|
)
|
|
|
|
// ParamHandler fn
|
|
type ParamHandler func(target *map[string]interface{}, args ...interface{})
|
|
|
|
// BatchParam str
|
|
type BatchParam struct {
|
|
Params map[string]interface{}
|
|
Handler ParamHandler
|
|
}
|
|
|
|
// NewBatchParam func
|
|
func NewBatchParam(p map[string]interface{}, h ParamHandler) *BatchParam {
|
|
if h == nil {
|
|
h = BaseParamHandler
|
|
}
|
|
return &BatchParam{
|
|
Params: p,
|
|
Handler: h,
|
|
}
|
|
}
|
|
|
|
var (
|
|
// BaseParamHandler fn
|
|
BaseParamHandler = func(target *map[string]interface{}, args ...interface{}) {}
|
|
// PushParamHandler fn
|
|
PushParamHandler = func(target *map[string]interface{}, args ...interface{}) {
|
|
var (
|
|
ok bool
|
|
arc *Archive
|
|
fans []int64
|
|
)
|
|
if target == nil || (*target)["archive"] == nil {
|
|
log.Warn("PushParamHandler target(%+v)/target[archive] nil, args(%+v)", target, args)
|
|
} else if arc, ok = (*target)["archive"].(*Archive); !ok || arc == nil {
|
|
log.Warn("PushParamHandler target[archive]=%+v parse failed/nil, args(%+v), target(%+v)", (*target)["archive"], args, target)
|
|
}
|
|
if arc == nil {
|
|
arc = &Archive{}
|
|
}
|
|
|
|
if len(args) != 1 || args[0] == nil {
|
|
log.Warn("PushParamHandler args(%+v) less than 1 or nil, target(%+v) archive(%+v)", args, target, arc)
|
|
} else if fans, ok = args[0].([]int64); !ok {
|
|
log.Warn("PushParamHandler args(%+v) parse failed, target(%+v) archive(%+v)", args, target, arc)
|
|
}
|
|
|
|
b := md5.Sum([]byte(fmt.Sprintf("%d%s", arc.ID, xstr.JoinInts(fans))))
|
|
(*target)["uuid"] = fmt.Sprintf("%s%d", hex.EncodeToString(b[:]), time.Now().UnixNano())
|
|
}
|
|
)
|