package service import ( "dashoo.cn/opms_libary/request" "github.com/gogf/gf/os/gtime" "log" "reflect" ) var ( // CommonUpdateFieldEx UpdateFieldEx 更新过滤字段 CommonUpdateFieldEx = []interface{}{"created_by", "created_name", "created_time"} UpdateFieldEx = []interface{}{"id", "created_by", "created_name", "created_time"} ) // SetCurrentCreatedInfo 插入数据库时设置创建信息 func SetCurrentCreatedInfo(entity interface{}, cxtUser *request.UserInfo) { SetCreatedInfo(entity, cxtUser.Id, cxtUser.UserName) } func SetCreatedInfo(entity interface{}, id int, name string) { v := reflect.ValueOf(entity) t := reflect.TypeOf(entity) if t.Kind() == reflect.Map { data := entity.(map[string]interface{}) data["created_by"] = id data["created_name"] = name data["created_time"] = gtime.Now() return } if t.Kind() == reflect.Ptr { t = t.Elem() v = v.Elem() } if t.Kind() != reflect.Struct { log.Println("Check type error not Struct") return } for i := 0; i < t.NumField(); i++ { fieldName := t.Field(i).Name if tag, ok := t.Field(i).Tag.Lookup("orm"); ok { switch tag { case "created_by": v.FieldByName(fieldName).Set(reflect.ValueOf(id)) case "created_name": v.FieldByName(fieldName).Set(reflect.ValueOf(name)) case "created_time": v.FieldByName(fieldName).Set(reflect.ValueOf(gtime.Now())) } } } } // SetCurrentUpdatedInfo 插入数据库时设置修改信息 func SetCurrentUpdatedInfo(entity interface{}, cxtUser *request.UserInfo) { SetUpdatedInfo(entity, cxtUser.Id, cxtUser.UserName) } func SetUpdatedInfo(entity interface{}, id int, name string) { v := reflect.ValueOf(entity) t := reflect.TypeOf(entity) if t.Kind() == reflect.Map { data := entity.(map[string]interface{}) data["updated_by"] = id data["updated_name"] = name data["updated_time"] = gtime.Now() return } if t.Kind() == reflect.Ptr { t = t.Elem() v = v.Elem() } if t.Kind() != reflect.Struct { log.Println("Check type error not Struct") return } for i := 0; i < t.NumField(); i++ { fieldName := t.Field(i).Name if tag, ok := t.Field(i).Tag.Lookup("orm"); ok { switch tag { case "updated_by": v.FieldByName(fieldName).Set(reflect.ValueOf(id)) case "updated_name": v.FieldByName(fieldName).Set(reflect.ValueOf(name)) case "updated_time": v.FieldByName(fieldName).Set(reflect.ValueOf(gtime.Now())) } } } }