123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360 |
- 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"`
- }
|