You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
360 lines
10 KiB
360 lines
10 KiB
package model |
|
|
|
import ( |
|
"encoding/json" |
|
"fmt" |
|
"reflect" |
|
|
|
"go-common/app/admin/main/aegis/model/common" |
|
"go-common/app/admin/main/aegis/model/net" |
|
"go-common/app/admin/main/aegis/model/resource" |
|
"go-common/app/admin/main/aegis/model/task" |
|
member "go-common/app/service/main/account/api" |
|
"go-common/library/log" |
|
) |
|
|
|
const ( |
|
// DefaultZeroInt form default zero |
|
DefaultZeroInt = int64(-12345) |
|
) |
|
|
|
// EngineOption . |
|
type EngineOption struct { |
|
common.BaseOptions |
|
TaskID int64 `json:"task_id" form:"task_id"` |
|
Result *resource.Result `json:"resource_result" form:"resource_result" submit:"object"` // 资源的修改内容,要传就全传,否则传空 |
|
Forbid *Forbid `json:"forbid_params" submit:"json"` |
|
ExtraData map[string]interface{} `json:"extra_data" submit:"map"` |
|
} |
|
|
|
// Forbid 封禁参数 |
|
type Forbid struct { |
|
Notify int `json:"notify"` |
|
Reason string `json:"reason"` |
|
Duration int64 `json:"duration"` |
|
Comment string `json:"comment"` |
|
Img string `json:"img"` |
|
} |
|
|
|
// InfoResOption . |
|
type InfoResOption struct { |
|
common.BaseOptions |
|
} |
|
|
|
// ListResOption . |
|
type ListResOption struct { |
|
common.Pager |
|
common.BaseOptions |
|
BusinessID int64 `form:"business_id"` |
|
FlowID int64 `form:"flow_id"` |
|
} |
|
|
|
// SubmitOptions 审核结果提交参数 |
|
type SubmitOptions struct { |
|
EngineOption |
|
NewFlowID int64 `json:"newflow_id"` |
|
BindStr string `json:"binds"` |
|
Binds []int64 `json:"-"` |
|
} |
|
|
|
// BatchOption 批量提交 |
|
type BatchOption struct { |
|
BusinessID int64 `form:"business_id" json:"business_id" validate:"required"` |
|
NetID int64 `form:"net_id" json:"net_id"` |
|
UID int64 `form:"uid" json:"uid"` |
|
Debug int8 `form:"debug" json:"debug"` |
|
Uname string `form:"uname" json:"uname"` |
|
RIDs []int64 `form:"rids,split" json:"rids" validate:"gt=0,dive,gt=0"` |
|
Binds []int64 `form:"binds,split" json:"binds" validate:"gt=0,dive,gt=0"` |
|
RejectReason string `form:"reject_reason"` |
|
ReasonID int64 `form:"reason_id" default:"0"` |
|
Notify int8 `form:"notify"` |
|
} |
|
|
|
// Tip 批量提交的错误提示 |
|
type Tip struct { |
|
Success []int64 `json:"success"` |
|
Async []int64 `json:"async"` |
|
Fail map[int64]string `json:"fail"` |
|
} |
|
|
|
// AddOption add option |
|
type AddOption struct { |
|
resource.Resource |
|
State int `form:"state" json:"state"` |
|
NetID int64 `form:"net_id" json:"net_id" validate:"required"` |
|
} |
|
|
|
// UpdateKeys 可更新的资源字段 |
|
var UpdateKeys = map[string]struct{}{ |
|
"mid": {}, |
|
"content": {}, |
|
"extra1": {}, |
|
"extra2": {}, |
|
"extra3": {}, |
|
"extra4": {}, |
|
"extra5": {}, |
|
"extra6": {}, |
|
"extra1s": {}, |
|
"extra2s": {}, |
|
"extra3s": {}, |
|
"extra4s": {}, |
|
"extratime1": {}, |
|
"octime": {}, |
|
"ptime": {}, |
|
"metadata": {}, |
|
} |
|
|
|
// UpdateOption update option |
|
type UpdateOption struct { |
|
BusinessID int64 `form:"business_id" json:"business_id" validate:"required"` |
|
NetID int64 `form:"net_id" json:"net_id" validate:"required"` |
|
OID string `form:"oid" json:"oid" validate:"required"` |
|
Update map[string]interface{} `json:"update"` |
|
} |
|
|
|
// AuditInfo 审核详情页 |
|
type AuditInfo struct { |
|
UnDoStat *task.UnDOStat `json:"undo_stat"` |
|
|
|
Task *task.Task `json:"task"` |
|
|
|
Flow *net.TransitionInfo `json:"flow"` |
|
|
|
Resource *resource.Res `json:"resource"` |
|
|
|
OperHistorys []string `json:"historys"` |
|
|
|
IFrame string `json:"iframe_url,omitempty"` |
|
|
|
UserInfo *UserInfo `json:"user_info"` |
|
UserGroup map[int64]*common.Group `json:"user_group"` |
|
Hit []string `json:"hit"` |
|
|
|
Actions []*Action `json:"actions"` |
|
} |
|
|
|
// UserInfo . |
|
type UserInfo struct { |
|
Mid int64 `json:"mid"` |
|
Name string `json:"name"` |
|
Official member.OfficialInfo `json:"official"` |
|
Follower int64 `json:"follower"` |
|
} |
|
|
|
// SyncMessage . |
|
type SyncMessage struct { |
|
URL string |
|
Uname string `json:"auditor"` |
|
MID int64 `json:"uid"` |
|
OID string `json:"oid"` |
|
RejectReason string `json:"reason"` |
|
FlowData map[string]interface{} `json:"flow_data"` |
|
ExtraData map[string]interface{} `json:"extra_data"` |
|
ForbidParams map[string]interface{} `json:"forbid_params"` |
|
Attribute map[string]int8 `json:"attribute"` |
|
} |
|
|
|
// GetEmptyInfo empty info for debug |
|
func GetEmptyInfo() *AuditInfo { |
|
info := &AuditInfo{ |
|
UnDoStat: &task.UnDOStat{}, |
|
Task: &task.Task{}, |
|
Flow: &net.TransitionInfo{ |
|
Operations: []*net.TranOperation{{}}, |
|
}, |
|
UserInfo: &UserInfo{}, |
|
Resource: &resource.Res{}, |
|
OperHistorys: []string{ |
|
"wulalalal", |
|
}, |
|
IFrame: "iframe", |
|
} |
|
return info |
|
} |
|
|
|
// SearchParams .. |
|
type SearchParams struct { |
|
common.Pager |
|
Debug int8 `form:"debug" reflect:"ignore"` |
|
FilterOff bool `form:"state_filter_off" reflect:"ignore"` |
|
BusinessID int64 `form:"business_id" validate:"required" reflect:"business_id"` |
|
OID []string `form:"oid,split" reflect:"oid"` |
|
FlowID int64 `form:"flow_id" default:"-12345" reflect:"flow_id,omitdefault"` |
|
State int64 `form:"state" default:"-12345" reflect:"state,omitdefault"` |
|
Mid int64 `form:"mid" default:"-12345" reflect:"mid,omitdefault"` |
|
CtimeFrom string `form:"ctime_from" reflect:"ctime,from"` |
|
CtimeTo string `form:"ctime_to" reflect:"ctime,to"` |
|
Extra1 string `form:"extra1" reflect:"extra1" parse:"[]int"` |
|
Extra2 string `form:"extra2" reflect:"extra2" parse:"int"` |
|
Extra3 string `form:"extra3" reflect:"extra3" parse:"int"` |
|
Extra4 string `form:"extra4" reflect:"extra4" parse:"int"` |
|
Extra5 string `form:"extra4" reflect:"extra5" parse:"int"` |
|
Extra6 string `form:"extra4" reflect:"extra6" parse:"int"` |
|
Extra1s string `form:"extra1s" reflect:"extra1s" ` |
|
Extra2s string `form:"extra2s" reflect:"extra2s" ` |
|
Extra3s string `form:"extra3s" reflect:"extra3s" ` |
|
Extra4s string `form:"extra4s" reflect:"extra4s" ` |
|
ExtraTime1 string `form:"extratime1" reflect:"extratime1" ` //TODO 具体用到了再看怎么解析 |
|
KeyWord string `form:"keyWords" reflect:"ignore"` |
|
CtimeOrder string `form:"ctime_order" reflect:"ignore"` //TODO 等octime导入后要按照octime筛选 |
|
} |
|
|
|
// SearchRes search list. |
|
type SearchRes struct { |
|
Resources []*ListRscItem `json:"result"` |
|
Page struct { |
|
Num int `json:"num"` |
|
Size int `json:"size"` |
|
Total int `json:"total"` |
|
} `json:"page"` |
|
} |
|
|
|
//Column . |
|
type Column struct { |
|
Name string `json:"name"` |
|
ChName string `json:"chname"` |
|
Enum map[int64]string `json:"enum,omitempty"` |
|
} |
|
|
|
// ListRscItem . |
|
type ListRscItem struct { |
|
resource.Res |
|
FlowID int64 `json:"flow_id"` |
|
UserInfo *UserInfo `json:"user_info"` |
|
UserGroup map[int64]*common.Group `json:"user_group"` |
|
Hit []string `json:"hit"` |
|
} |
|
|
|
// ListTaskItem . |
|
type ListTaskItem struct { |
|
ListTask |
|
WaitTime string `json:"wait_time"` |
|
OID string `json:"oid"` |
|
Content string `json:"content"` |
|
UserInfo *UserInfo `json:"user_info"` |
|
UserGroup map[int64]*common.Group `json:"user_group"` |
|
Metas map[string]interface{} `json:"metas"` |
|
} |
|
|
|
// ListTask 转化gtime |
|
type ListTask struct { |
|
*task.Task |
|
GTstr string `json:"gtime"` |
|
CTstr string `json:"ctime"` |
|
MTstr string `json:"mtime"` |
|
UserName string `json:"uid"` |
|
MidStr string `json:"mid"` |
|
} |
|
|
|
// EmptyListItem . |
|
func EmptyListItem() *ListRscItem { |
|
return &ListRscItem{ |
|
UserInfo: &UserInfo{}, |
|
} |
|
} |
|
|
|
// IsImgType file type is image |
|
func IsImgType(fileType string) bool { |
|
return fileType != "image/jpeg" && fileType != "image/png" && fileType != "image/webp" |
|
} |
|
|
|
//Action 下发到前端的组件 |
|
type Action struct { |
|
Name string `json:"name"` |
|
URL string `json:"url"` |
|
Method string `json:"method"` |
|
Response string `json:"response"` |
|
Extra string `json:"extra,omitempty"` |
|
Params map[string]*ActionParam `json:"params"` |
|
} |
|
|
|
//ActionParam 烦人啊,动态的打回理由是必传参数 |
|
type ActionParam struct { |
|
Value string `json:"value"` |
|
Default string `json:"default"` |
|
} |
|
|
|
//SubReflect . |
|
func SubReflect(ot reflect.Type, ov reflect.Value, key string, vals []string, defaultval string, params map[string]interface{}) { |
|
var result string |
|
boommsg := fmt.Sprintf("key:%s vals:%v ot:%+v vt:%+v", key, vals, ot, reflect.TypeOf(ov).Kind()) |
|
|
|
if len(vals) == 0 { |
|
return |
|
} |
|
val := vals[0] |
|
tfield, ok := ot.FieldByName(val) |
|
if !ok { |
|
log.Error("SubReflect1:" + boommsg) |
|
return |
|
} |
|
vfield := ov.FieldByName(val) |
|
if !vfield.IsValid() { |
|
log.Error("SubReflect7:" + boommsg) |
|
return |
|
} |
|
|
|
switch tfield.Tag.Get("submit") { |
|
case "object": |
|
vals = vals[1:] |
|
tt := tfield.Type |
|
vv := reflect.ValueOf(vfield) |
|
if tfield.Type.Kind() == reflect.Ptr { |
|
tt = tfield.Type.Elem() |
|
vv = vfield.Elem() |
|
} |
|
SubReflect(tt, vv, key, vals, defaultval, params) |
|
return |
|
case "map": |
|
if len(vals) != 2 || tfield.Type.Kind() != reflect.Map { |
|
log.Error("SubReflect2:" + boommsg) |
|
} |
|
|
|
v := vfield.MapIndex(reflect.ValueOf(vals[1])) |
|
if !v.IsValid() { //批量操作,可能会没有map的参数 |
|
log.Warn("SubReflect4:" + boommsg) |
|
return |
|
} |
|
result = fmt.Sprint(v.Interface()) |
|
case "json": |
|
bs, err := json.Marshal(vfield.Interface()) |
|
if err != nil { |
|
log.Error("SubReflect5:" + boommsg) |
|
return |
|
} |
|
result = string(bs) |
|
case "int", "string": |
|
result = fmt.Sprint(vfield.Interface()) |
|
default: |
|
log.Error("SubReflect6:" + boommsg) |
|
} |
|
if result == "" { |
|
result = defaultval |
|
} |
|
params[key] = result |
|
} |
|
|
|
//Auth auth |
|
type Auth struct { |
|
OK bool `json:"ok"` |
|
Admin bool `json:"admin"` |
|
Business map[int64]int64 `json:"business"` |
|
} |
|
|
|
//UpsertItem 更新搜索的items |
|
type UpsertItem struct { |
|
ID int64 `json:"id"` |
|
State int `json:"state"` |
|
Extra1 int64 `json:"extra1"` |
|
Extra2 int64 `json:"extra2"` |
|
Extra3 int64 `json:"extra3"` |
|
Extra4 int64 `json:"extra4"` |
|
} |
|
|
|
//CancelOption . |
|
type CancelOption struct { |
|
BusinessID int64 `form:"business_id" validate:"required" json:"business_id"` |
|
Oids []string `form:"oids,split" validate:"required" json:"oids"` |
|
Reason string `form:"reason" json:"reason"` |
|
}
|
|
|