361 lines
10 KiB
Go
361 lines
10 KiB
Go
|
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"`
|
|||
|
}
|