Przeglądaj źródła

升级gf与gtoken到最新版本,更新gf生成的model为最新版本

yxh 5 lat temu
rodzic
commit
092db0cb2b
50 zmienionych plików z 1301 dodań i 1055 usunięć
  1. 2 2
      app/controller/admin/auth.go
  2. 3 2
      app/controller/admin/config_dict.go
  3. 1 1
      app/controller/admin/dept.go
  4. 3 3
      app/controller/admin/index.go
  5. 23 16
      app/model/admin/auth_rule/auth_rule_entity.go
  6. 90 80
      app/model/admin/auth_rule/auth_rule_model.go
  7. 5 0
      app/model/admin/casbin_rule/casbin_rule_entity.go
  8. 68 80
      app/model/admin/casbin_rule/casbin_rule_model.go
  9. 7 2
      app/model/admin/cms_category/cms_category_entity.go
  10. 90 80
      app/model/admin/cms_category/cms_category_model.go
  11. 5 0
      app/model/admin/cms_category_news/cms_category_news_entity.go
  12. 60 80
      app/model/admin/cms_category_news/cms_category_news_model.go
  13. 1 1
      app/model/admin/cms_news/cms_news.go
  14. 2 2
      app/model/admin/model_info/model_info.go
  15. 2 2
      app/model/admin/role/role.go
  16. 14 12
      app/model/admin/role/role_entity.go
  17. 166 69
      app/model/admin/role/role_model.go
  18. 2 2
      app/model/admin/sys_config/sys_config.go
  19. 6 1
      app/model/admin/sys_config/sys_config_entity.go
  20. 74 80
      app/model/admin/sys_config/sys_config_model.go
  21. 2 2
      app/model/admin/sys_dept/sys_dept.go
  22. 2 2
      app/model/admin/sys_dict_data/sys_dict_data.go
  23. 7 2
      app/model/admin/sys_dict_data/sys_dict_data_entity.go
  24. 82 80
      app/model/admin/sys_dict_data/sys_dict_data_model.go
  25. 2 2
      app/model/admin/sys_dict_type/sys_dict_type.go
  26. 5 0
      app/model/admin/sys_dict_type/sys_dict_type_entity.go
  27. 72 80
      app/model/admin/sys_dict_type/sys_dict_type_model.go
  28. 2 2
      app/model/admin/sys_job/sys_job.go
  29. 5 0
      app/model/admin/sys_job/sys_job_entity.go
  30. 82 80
      app/model/admin/sys_job/sys_job_model.go
  31. 6 1
      app/model/admin/sys_login_log/sys_login_log_entity.go
  32. 74 80
      app/model/admin/sys_login_log/sys_login_log_model.go
  33. 5 0
      app/model/admin/sys_oper_log/sys_oper_log_entity.go
  34. 86 80
      app/model/admin/sys_oper_log/sys_oper_log_model.go
  35. 2 2
      app/model/admin/sys_post/sys_post.go
  36. 6 6
      app/model/admin/user/user.go
  37. 8 6
      app/model/admin/user/user_entity.go
  38. 199 74
      app/model/admin/user/user_model.go
  39. 2 2
      app/model/admin/user_post/user_post.go
  40. 1 1
      app/service/admin/cms_service/news.go
  41. 1 1
      app/service/admin/dept_service/dept.go
  42. 2 2
      app/service/admin/dict_service/dict_data.go
  43. 2 2
      app/service/admin/dict_service/dict_type.go
  44. 2 2
      app/service/admin/monitor_service/job.go
  45. 2 2
      app/service/admin/params_service/params.go
  46. 8 8
      app/service/admin/user_service/user.go
  47. 2 2
      go.mod
  48. 5 17
      go.sum
  49. 1 1
      library/service/service.go
  50. 2 1
      middleWare/middleware.go

+ 2 - 2
app/controller/admin/auth.go

@@ -490,7 +490,7 @@ func (c *Auth) EditUser(r *ghttp.Request) {
 		}
 		response.SusJson(true, r, "修改管理员成功")
 	}
-	id := r.GetRequestInt("id")
+	id := r.GetUint64("id")
 	//用户用户信息
 	userEntity, err := user.Model.Where("id=?", id).One()
 	if err != nil {
@@ -511,7 +511,7 @@ func (c *Auth) EditUser(r *ghttp.Request) {
 		response.FailJson(true, r, "获取用户角色数据失败")
 	}
 	if checkedRoleIds == nil {
-		checkedRoleIds = g.SliceInt{}
+		checkedRoleIds = []uint{}
 	}
 	//获取岗位信息
 	posts, err := post_service.GetUsedPost()

+ 3 - 2
app/controller/admin/config_dict.go

@@ -9,6 +9,7 @@ import (
 	"gfast/library/response"
 	"github.com/gogf/gf/frame/g"
 	"github.com/gogf/gf/net/ghttp"
+	"github.com/gogf/gf/util/gconv"
 	"github.com/gogf/gf/util/gvalid"
 )
 
@@ -158,7 +159,7 @@ func (c *Dict) DataAdd(r *ghttp.Request) {
 			response.FailJson(true, r, err.(*gvalid.Error).FirstString())
 		}
 		userId := user_service.GetLoginID(r) //获取登陆用户id
-		_, err := dict_service.AddSaveData(req, userId)
+		_, err := dict_service.AddSaveData(req, gconv.Uint64(userId))
 		if err != nil {
 			response.FailJson(true, r, err.Error())
 		}
@@ -183,7 +184,7 @@ func (c *Dict) DataEdit(r *ghttp.Request) {
 			response.FailJson(true, r, err.(*gvalid.Error).FirstString())
 		}
 		userId := user_service.GetLoginID(r)
-		_, err := dict_service.EditSaveData(req, userId)
+		_, err := dict_service.EditSaveData(req, gconv.Uint64(userId))
 		if err != nil {
 			response.FailJson(true, r, err.Error())
 		}

+ 1 - 1
app/controller/admin/dept.go

@@ -87,7 +87,7 @@ func (c *Dept) EditDept(r *ghttp.Request) {
 		response.SusJson(true, r, "编辑成功")
 
 	}
-	id := r.GetInt64("id")
+	id := r.GetUint64("id")
 	if id == 0 {
 		response.FailJson(true, r, "参数错误")
 	}

+ 3 - 3
app/controller/admin/index.go

@@ -38,7 +38,7 @@ func (c *Index) GetInfo(r *ghttp.Request) {
 			roles, err := user_service.GetAdminRole(userId, allRoles)
 			if err == nil {
 				name := make([]string, len(roles))
-				roleIds := make([]int, len(roles))
+				roleIds := make([]uint, len(roles))
 				for k, v := range roles {
 					name[k] = v.Name
 					roleIds[k] = v.Id
@@ -79,7 +79,7 @@ func (c *Index) GetRouters(r *ghttp.Request) {
 
 		//获取无需验证权限的用户id
 		for _, v := range service.NotCheckAuthAdminIds {
-			if v == userId {
+			if gconv.Uint64(v) == userId {
 				isSuperAdmin = true
 				break
 			}
@@ -91,7 +91,7 @@ func (c *Index) GetRouters(r *ghttp.Request) {
 			roles, err := user_service.GetAdminRole(userId, allRoles)
 			if err == nil {
 				name := make([]string, len(roles))
-				roleIds := make([]int, len(roles))
+				roleIds := make([]uint, len(roles))
 				for k, v := range roles {
 					name[k] = v.Name
 					roleIds[k] = v.Id

+ 23 - 16
app/model/admin/auth_rule/auth_rule_entity.go

@@ -11,22 +11,24 @@ import (
 
 // Entity is the golang structure for table auth_rule.
 type Entity struct {
-	Id         uint   `orm:"id,primary"  json:"id"`           //
-	Pid        uint   `orm:"pid"         json:"pid"`          // 父ID
-	Name       string `orm:"name,unique" json:"name"`         // 规则名称
-	Title      string `orm:"title"       json:"title"`        // 规则名称
-	Icon       string `orm:"icon"        json:"icon"`         // 图标
-	Condition  string `orm:"condition"   json:"condition"`    // 条件
-	Remark     string `orm:"remark"      json:"remark"`       // 备注
-	MenuType   uint   `orm:"menu_type"      json:"menu_type"` // 类型 0目录 1菜单 2按钮
-	Createtime uint   `orm:"createtime"  json:"createtime"`   // 创建时间
-	Updatetime uint   `orm:"updatetime"  json:"updatetime"`   // 更新时间
-	Weigh      int    `orm:"weigh"       json:"weigh"`        // 权重
-	Status     uint   `orm:"status"      json:"status"`       // 状态
-	AlwaysShow uint   `orm:"always_show"   json:"alwaysShow"` //显示状态 0隐藏 1显示
-	Path       string `orm:"path"     json:"path"`            //路由地址
-	Component  string `orm:"component"     json:"component"`  //组件路径
-	IsFrame    uint   `orm:"is_frame"  json:"isFrame"`        //是否外链 1是 0否
+	Id         uint   `orm:"id,primary"  json:"id"`          //
+	Pid        uint   `orm:"pid"         json:"pid"`         // 父ID
+	Name       string `orm:"name,unique" json:"name"`        // 规则名称
+	Title      string `orm:"title"       json:"title"`       // 规则名称
+	Icon       string `orm:"icon"        json:"icon"`        // 图标
+	Condition  string `orm:"condition"   json:"condition"`   // 条件
+	Remark     string `orm:"remark"      json:"remark"`      // 备注
+	MenuType   uint   `orm:"menu_type"   json:"menu_type"`   // 类型 0目录 1菜单 2按钮
+	Createtime uint   `orm:"createtime"  json:"createtime"`  // 创建时间
+	Updatetime uint   `orm:"updatetime"  json:"updatetime"`  // 更新时间
+	Weigh      int    `orm:"weigh"       json:"weigh"`       // 权重
+	Status     uint   `orm:"status"      json:"status"`      // 状态
+	AlwaysShow uint   `orm:"always_show" json:"always_show"` // 显示状态
+	Path       string `orm:"path"        json:"path"`        // 路由地址
+	Component  string `orm:"component"   json:"component"`   // 组件路径
+	IsFrame    uint   `orm:"is_frame"    json:"is_frame"`    // 是否外链 1是 0否
+	ModuleType string `orm:"module_type" json:"module_type"` // 所属模块
+	ModelId    uint   `orm:"model_id"    json:"model_id"`    // 模型ID
 }
 
 // OmitEmpty sets OPTION_OMITEMPTY option for the model, which automatically filers
@@ -40,6 +42,11 @@ func (r *Entity) Insert() (result sql.Result, err error) {
 	return Model.Data(r).Insert()
 }
 
+// InsertIgnore does "INSERT IGNORE INTO ..." statement for inserting current object into table.
+func (r *Entity) InsertIgnore() (result sql.Result, err error) {
+	return Model.Data(r).InsertIgnore()
+}
+
 // Replace does "REPLACE...INTO..." statement for inserting current object into table.
 // If there's already another same record in the table (it checks using primary key or unique index),
 // it deletes it and insert this one.

+ 90 - 80
app/model/admin/auth_rule/auth_rule_model.go

@@ -8,12 +8,13 @@ import (
 	"database/sql"
 	"github.com/gogf/gf/database/gdb"
 	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/frame/gmvc"
 	"time"
 )
 
 // arModel is a active record design model for table auth_rule operations.
 type arModel struct {
-	M *gdb.Model
+	gmvc.M
 }
 
 var (
@@ -21,6 +22,46 @@ var (
 	Table = "auth_rule"
 	// Model is the model object of auth_rule.
 	Model = &arModel{g.DB("default").Table(Table).Safe()}
+	// Columns defines and stores column names for table auth_rule.
+	Columns = struct {
+		Id         string //
+		Pid        string // 父ID
+		Name       string // 规则名称
+		Title      string // 规则名称
+		Icon       string // 图标
+		Condition  string // 条件
+		Remark     string // 备注
+		MenuType   string // 类型 0目录 1菜单 2按钮
+		Createtime string // 创建时间
+		Updatetime string // 更新时间
+		Weigh      string // 权重
+		Status     string // 状态
+		AlwaysShow string // 显示状态
+		Path       string // 路由地址
+		Component  string // 组件路径
+		IsFrame    string // 是否外链 1是 0否
+		ModuleType string // 所属模块
+		ModelId    string // 模型ID
+	}{
+		Id:         "id",
+		Pid:        "pid",
+		Name:       "name",
+		Title:      "title",
+		Icon:       "icon",
+		Condition:  "condition",
+		Remark:     "remark",
+		MenuType:   "menu_type",
+		Createtime: "createtime",
+		Updatetime: "updatetime",
+		Weigh:      "weigh",
+		Status:     "status",
+		AlwaysShow: "always_show",
+		Path:       "path",
+		Component:  "component",
+		IsFrame:    "is_frame",
+		ModuleType: "module_type",
+		ModelId:    "model_id",
+	}
 )
 
 // FindOne is a convenience method for Model.FindOne.
@@ -41,6 +82,12 @@ func FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
 	return Model.FindValue(fieldsAndWhere...)
 }
 
+// FindArray is a convenience method for Model.FindArray.
+// See Model.FindArray.
+func FindArray(fieldsAndWhere ...interface{}) ([]gdb.Value, error) {
+	return Model.FindArray(fieldsAndWhere...)
+}
+
 // FindCount is a convenience method for Model.FindCount.
 // See Model.FindCount.
 func FindCount(where ...interface{}) (int, error) {
@@ -52,6 +99,11 @@ func Insert(data ...interface{}) (result sql.Result, err error) {
 	return Model.Insert(data...)
 }
 
+// InsertIgnore is a convenience method for Model.InsertIgnore.
+func InsertIgnore(data ...interface{}) (result sql.Result, err error) {
+	return Model.InsertIgnore(data...)
+}
+
 // Replace is a convenience method for Model.Replace.
 func Replace(data ...interface{}) (result sql.Result, err error) {
 	return Model.Replace(data...)
@@ -94,18 +146,30 @@ func (m *arModel) Slave() *arModel {
 }
 
 // LeftJoin does "LEFT JOIN ... ON ..." statement on the model.
-func (m *arModel) LeftJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.LeftJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").LeftJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").LeftJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) LeftJoin(table ...string) *arModel {
+	return &arModel{m.M.LeftJoin(table...)}
 }
 
 // RightJoin does "RIGHT JOIN ... ON ..." statement on the model.
-func (m *arModel) RightJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.RightJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").RightJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").RightJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) RightJoin(table ...string) *arModel {
+	return &arModel{m.M.RightJoin(table...)}
 }
 
 // InnerJoin does "INNER JOIN ... ON ..." statement on the model.
-func (m *arModel) InnerJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.InnerJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").InnerJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").InnerJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) InnerJoin(table ...string) *arModel {
+	return &arModel{m.M.InnerJoin(table...)}
 }
 
 // Fields sets the operation fields of the model, multiple fields joined using char ','.
@@ -165,8 +229,8 @@ func (m *arModel) Group(groupBy string) *arModel {
 }
 
 // Order sets the "ORDER BY" statement for the model.
-func (m *arModel) Order(orderBy string) *arModel {
-	return &arModel{m.M.Order(orderBy)}
+func (m *arModel) Order(orderBy ...string) *arModel {
+	return &arModel{m.M.Order(orderBy...)}
 }
 
 // Limit sets the "LIMIT" statement for the model.
@@ -207,8 +271,8 @@ func (m *arModel) Batch(batch int) *arModel {
 // control the cache like changing the <duration> or clearing the cache with specified <name>.
 //
 // Note that, the cache feature is disabled if the model is operating on a transaction.
-func (m *arModel) Cache(expire time.Duration, name ...string) *arModel {
-	return &arModel{m.M.Cache(expire, name...)}
+func (m *arModel) Cache(duration time.Duration, name ...string) *arModel {
+	return &arModel{m.M.Cache(duration, name...)}
 }
 
 // Data sets the operation data for the model.
@@ -222,53 +286,6 @@ func (m *arModel) Data(data ...interface{}) *arModel {
 	return &arModel{m.M.Data(data...)}
 }
 
-// Insert does "INSERT INTO ..." statement for the model.
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Insert(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Insert(data...)
-}
-
-// Replace does "REPLACE INTO ..." statement for the model.
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Replace(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Replace(data...)
-}
-
-// Save does "INSERT INTO ... ON DUPLICATE KEY UPDATE..." statement for the model.
-// It updates the record if there's primary or unique index in the saving data,
-// or else it inserts a new record into the table.
-//
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Save(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Save(data...)
-}
-
-// Update does "UPDATE ... " statement for the model.
-//
-// If the optional parameter <dataAndWhere> is given, the dataAndWhere[0] is the updated
-// data field, and dataAndWhere[1:] is treated as where condition fields.
-// Also see Model.Data and Model.Where functions.
-func (m *arModel) Update(dataAndWhere ...interface{}) (result sql.Result, err error) {
-	return m.M.Update(dataAndWhere...)
-}
-
-// Delete does "DELETE FROM ... " statement for the model.
-// The optional parameter <where> is the same as the parameter of Model.Where function,
-// see Model.Where.
-func (m *arModel) Delete(where ...interface{}) (result sql.Result, err error) {
-	return m.M.Delete(where...)
-}
-
-// Count does "SELECT COUNT(x) FROM ..." statement for the model.
-// The optional parameter <where> is the same as the parameter of Model.Where function,
-// see Model.Where.
-func (m *arModel) Count(where ...interface{}) (int, error) {
-	return m.M.Count(where...)
-}
-
 // All does "SELECT FROM ..." statement for the model.
 // It retrieves the records from table and returns the result as []*Entity.
 // It returns nil if there's no record retrieved with the given conditions from table.
@@ -304,16 +321,6 @@ func (m *arModel) One(where ...interface{}) (*Entity, error) {
 	return entity, nil
 }
 
-// Value retrieves a specified record value from table and returns the result as interface type.
-// It returns nil if there's no record found with the given conditions from table.
-//
-// If the optional parameter <fieldsAndWhere> is given, the fieldsAndWhere[0] is the selected fields
-// and fieldsAndWhere[1:] is treated as where condition fields.
-// Also see Model.Fields and Model.Where functions.
-func (m *arModel) Value(fieldsAndWhere ...interface{}) (gdb.Value, error) {
-	return m.M.Value(fieldsAndWhere...)
-}
-
 // FindOne retrieves and returns a single Record by Model.WherePri and Model.One.
 // Also see Model.WherePri and Model.One.
 func (m *arModel) FindOne(where ...interface{}) (*Entity, error) {
@@ -342,18 +349,6 @@ func (m *arModel) FindAll(where ...interface{}) ([]*Entity, error) {
 	return entities, nil
 }
 
-// FindValue retrieves and returns single field value by Model.WherePri and Model.Value.
-// Also see Model.WherePri and Model.Value.
-func (m *arModel) FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
-	return m.M.FindValue(fieldsAndWhere...)
-}
-
-// FindCount retrieves and returns the record number by Model.WherePri and Model.Count.
-// Also see Model.WherePri and Model.Count.
-func (m *arModel) FindCount(where ...interface{}) (int, error) {
-	return m.M.FindCount(where...)
-}
-
 // Chunk iterates the table with given size and callback function.
 func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error) bool) {
 	m.M.Chunk(limit, func(result gdb.Result, err error) bool {
@@ -365,3 +360,18 @@ func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error)
 		return callback(entities, err)
 	})
 }
+
+// LockUpdate sets the lock for update for current operation.
+func (m *arModel) LockUpdate() *arModel {
+	return &arModel{m.M.LockUpdate()}
+}
+
+// LockShared sets the lock in share mode for current operation.
+func (m *arModel) LockShared() *arModel {
+	return &arModel{m.M.LockShared()}
+}
+
+// Unscoped enables/disables the soft deleting feature.
+func (m *arModel) Unscoped() *arModel {
+	return &arModel{m.M.Unscoped()}
+}

+ 5 - 0
app/model/admin/casbin_rule/casbin_rule_entity.go

@@ -31,6 +31,11 @@ func (r *Entity) Insert() (result sql.Result, err error) {
 	return Model.Data(r).Insert()
 }
 
+// InsertIgnore does "INSERT IGNORE INTO ..." statement for inserting current object into table.
+func (r *Entity) InsertIgnore() (result sql.Result, err error) {
+	return Model.Data(r).InsertIgnore()
+}
+
 // Replace does "REPLACE...INTO..." statement for inserting current object into table.
 // If there's already another same record in the table (it checks using primary key or unique index),
 // it deletes it and insert this one.

+ 68 - 80
app/model/admin/casbin_rule/casbin_rule_model.go

@@ -8,12 +8,13 @@ import (
 	"database/sql"
 	"github.com/gogf/gf/database/gdb"
 	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/frame/gmvc"
 	"time"
 )
 
 // arModel is a active record design model for table casbin_rule operations.
 type arModel struct {
-	M *gdb.Model
+	gmvc.M
 }
 
 var (
@@ -21,6 +22,24 @@ var (
 	Table = "casbin_rule"
 	// Model is the model object of casbin_rule.
 	Model = &arModel{g.DB("default").Table(Table).Safe()}
+	// Columns defines and stores column names for table casbin_rule.
+	Columns = struct {
+		Ptype string //
+		V0    string //
+		V1    string //
+		V2    string //
+		V3    string //
+		V4    string //
+		V5    string //
+	}{
+		Ptype: "ptype",
+		V0:    "v0",
+		V1:    "v1",
+		V2:    "v2",
+		V3:    "v3",
+		V4:    "v4",
+		V5:    "v5",
+	}
 )
 
 // FindOne is a convenience method for Model.FindOne.
@@ -41,6 +60,12 @@ func FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
 	return Model.FindValue(fieldsAndWhere...)
 }
 
+// FindArray is a convenience method for Model.FindArray.
+// See Model.FindArray.
+func FindArray(fieldsAndWhere ...interface{}) ([]gdb.Value, error) {
+	return Model.FindArray(fieldsAndWhere...)
+}
+
 // FindCount is a convenience method for Model.FindCount.
 // See Model.FindCount.
 func FindCount(where ...interface{}) (int, error) {
@@ -52,6 +77,11 @@ func Insert(data ...interface{}) (result sql.Result, err error) {
 	return Model.Insert(data...)
 }
 
+// InsertIgnore is a convenience method for Model.InsertIgnore.
+func InsertIgnore(data ...interface{}) (result sql.Result, err error) {
+	return Model.InsertIgnore(data...)
+}
+
 // Replace is a convenience method for Model.Replace.
 func Replace(data ...interface{}) (result sql.Result, err error) {
 	return Model.Replace(data...)
@@ -94,18 +124,30 @@ func (m *arModel) Slave() *arModel {
 }
 
 // LeftJoin does "LEFT JOIN ... ON ..." statement on the model.
-func (m *arModel) LeftJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.LeftJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").LeftJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").LeftJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) LeftJoin(table ...string) *arModel {
+	return &arModel{m.M.LeftJoin(table...)}
 }
 
 // RightJoin does "RIGHT JOIN ... ON ..." statement on the model.
-func (m *arModel) RightJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.RightJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").RightJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").RightJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) RightJoin(table ...string) *arModel {
+	return &arModel{m.M.RightJoin(table...)}
 }
 
 // InnerJoin does "INNER JOIN ... ON ..." statement on the model.
-func (m *arModel) InnerJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.InnerJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").InnerJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").InnerJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) InnerJoin(table ...string) *arModel {
+	return &arModel{m.M.InnerJoin(table...)}
 }
 
 // Fields sets the operation fields of the model, multiple fields joined using char ','.
@@ -165,8 +207,8 @@ func (m *arModel) Group(groupBy string) *arModel {
 }
 
 // Order sets the "ORDER BY" statement for the model.
-func (m *arModel) Order(orderBy string) *arModel {
-	return &arModel{m.M.Order(orderBy)}
+func (m *arModel) Order(orderBy ...string) *arModel {
+	return &arModel{m.M.Order(orderBy...)}
 }
 
 // Limit sets the "LIMIT" statement for the model.
@@ -207,8 +249,8 @@ func (m *arModel) Batch(batch int) *arModel {
 // control the cache like changing the <duration> or clearing the cache with specified <name>.
 //
 // Note that, the cache feature is disabled if the model is operating on a transaction.
-func (m *arModel) Cache(expire time.Duration, name ...string) *arModel {
-	return &arModel{m.M.Cache(expire, name...)}
+func (m *arModel) Cache(duration time.Duration, name ...string) *arModel {
+	return &arModel{m.M.Cache(duration, name...)}
 }
 
 // Data sets the operation data for the model.
@@ -222,53 +264,6 @@ func (m *arModel) Data(data ...interface{}) *arModel {
 	return &arModel{m.M.Data(data...)}
 }
 
-// Insert does "INSERT INTO ..." statement for the model.
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Insert(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Insert(data...)
-}
-
-// Replace does "REPLACE INTO ..." statement for the model.
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Replace(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Replace(data...)
-}
-
-// Save does "INSERT INTO ... ON DUPLICATE KEY UPDATE..." statement for the model.
-// It updates the record if there's primary or unique index in the saving data,
-// or else it inserts a new record into the table.
-//
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Save(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Save(data...)
-}
-
-// Update does "UPDATE ... " statement for the model.
-//
-// If the optional parameter <dataAndWhere> is given, the dataAndWhere[0] is the updated
-// data field, and dataAndWhere[1:] is treated as where condition fields.
-// Also see Model.Data and Model.Where functions.
-func (m *arModel) Update(dataAndWhere ...interface{}) (result sql.Result, err error) {
-	return m.M.Update(dataAndWhere...)
-}
-
-// Delete does "DELETE FROM ... " statement for the model.
-// The optional parameter <where> is the same as the parameter of Model.Where function,
-// see Model.Where.
-func (m *arModel) Delete(where ...interface{}) (result sql.Result, err error) {
-	return m.M.Delete(where...)
-}
-
-// Count does "SELECT COUNT(x) FROM ..." statement for the model.
-// The optional parameter <where> is the same as the parameter of Model.Where function,
-// see Model.Where.
-func (m *arModel) Count(where ...interface{}) (int, error) {
-	return m.M.Count(where...)
-}
-
 // All does "SELECT FROM ..." statement for the model.
 // It retrieves the records from table and returns the result as []*Entity.
 // It returns nil if there's no record retrieved with the given conditions from table.
@@ -304,16 +299,6 @@ func (m *arModel) One(where ...interface{}) (*Entity, error) {
 	return entity, nil
 }
 
-// Value retrieves a specified record value from table and returns the result as interface type.
-// It returns nil if there's no record found with the given conditions from table.
-//
-// If the optional parameter <fieldsAndWhere> is given, the fieldsAndWhere[0] is the selected fields
-// and fieldsAndWhere[1:] is treated as where condition fields.
-// Also see Model.Fields and Model.Where functions.
-func (m *arModel) Value(fieldsAndWhere ...interface{}) (gdb.Value, error) {
-	return m.M.Value(fieldsAndWhere...)
-}
-
 // FindOne retrieves and returns a single Record by Model.WherePri and Model.One.
 // Also see Model.WherePri and Model.One.
 func (m *arModel) FindOne(where ...interface{}) (*Entity, error) {
@@ -342,18 +327,6 @@ func (m *arModel) FindAll(where ...interface{}) ([]*Entity, error) {
 	return entities, nil
 }
 
-// FindValue retrieves and returns single field value by Model.WherePri and Model.Value.
-// Also see Model.WherePri and Model.Value.
-func (m *arModel) FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
-	return m.M.FindValue(fieldsAndWhere...)
-}
-
-// FindCount retrieves and returns the record number by Model.WherePri and Model.Count.
-// Also see Model.WherePri and Model.Count.
-func (m *arModel) FindCount(where ...interface{}) (int, error) {
-	return m.M.FindCount(where...)
-}
-
 // Chunk iterates the table with given size and callback function.
 func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error) bool) {
 	m.M.Chunk(limit, func(result gdb.Result, err error) bool {
@@ -365,3 +338,18 @@ func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error)
 		return callback(entities, err)
 	})
 }
+
+// LockUpdate sets the lock for update for current operation.
+func (m *arModel) LockUpdate() *arModel {
+	return &arModel{m.M.LockUpdate()}
+}
+
+// LockShared sets the lock in share mode for current operation.
+func (m *arModel) LockShared() *arModel {
+	return &arModel{m.M.LockShared()}
+}
+
+// Unscoped enables/disables the soft deleting feature.
+func (m *arModel) Unscoped() *arModel {
+	return &arModel{m.M.Unscoped()}
+}

+ 7 - 2
app/model/admin/cms_category/cms_category_entity.go

@@ -13,12 +13,12 @@ import (
 type Entity struct {
 	Id             uint64  `orm:"id,primary"      json:"id"`              // 分类id
 	ParentId       int64   `orm:"parent_id"       json:"parent_id"`       // 分类父id
-	ModelId        uint    `orm:"model_id"       json:"model_id"`         // 模型id
+	ModelId        uint    `orm:"model_id"        json:"model_id"`        // 模型ID
 	Status         uint    `orm:"status"          json:"status"`          // 状态,1:发布,0:不发布
 	DeleteTime     uint    `orm:"delete_time"     json:"delete_time"`     // 删除时间
 	ListOrder      float64 `orm:"list_order"      json:"list_order"`      // 排序
 	Name           string  `orm:"name"            json:"name"`            // 分类名称
-	Alias          string  `orm:"alias"            json:"alias"`          // 分类别名
+	Alias          string  `orm:"alias"           json:"alias"`           // 栏目别名
 	Description    string  `orm:"description"     json:"description"`     // 分类描述
 	SeoTitle       string  `orm:"seo_title"       json:"seo_title"`       //
 	SeoKeywords    string  `orm:"seo_keywords"    json:"seo_keywords"`    //
@@ -42,6 +42,11 @@ func (r *Entity) Insert() (result sql.Result, err error) {
 	return Model.Data(r).Insert()
 }
 
+// InsertIgnore does "INSERT IGNORE INTO ..." statement for inserting current object into table.
+func (r *Entity) InsertIgnore() (result sql.Result, err error) {
+	return Model.Data(r).InsertIgnore()
+}
+
 // Replace does "REPLACE...INTO..." statement for inserting current object into table.
 // If there's already another same record in the table (it checks using primary key or unique index),
 // it deletes it and insert this one.

+ 90 - 80
app/model/admin/cms_category/cms_category_model.go

@@ -8,12 +8,13 @@ import (
 	"database/sql"
 	"github.com/gogf/gf/database/gdb"
 	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/frame/gmvc"
 	"time"
 )
 
 // arModel is a active record design model for table cms_category operations.
 type arModel struct {
-	M *gdb.Model
+	gmvc.M
 }
 
 var (
@@ -21,6 +22,46 @@ var (
 	Table = "cms_category"
 	// Model is the model object of cms_category.
 	Model = &arModel{g.DB("default").Table(Table).Safe()}
+	// Columns defines and stores column names for table cms_category.
+	Columns = struct {
+		Id             string // 分类id
+		ParentId       string // 分类父id
+		ModelId        string // 模型ID
+		Status         string // 状态,1:发布,0:不发布
+		DeleteTime     string // 删除时间
+		ListOrder      string // 排序
+		Name           string // 分类名称
+		Alias          string // 栏目别名
+		Description    string // 分类描述
+		SeoTitle       string //
+		SeoKeywords    string //
+		SeoDescription string //
+		ListTpl        string // 分类列表模板
+		OneTpl         string // 分类文章页模板
+		More           string // 扩展属性
+		CateType       string // 分类类型
+		CateAddress    string // 跳转地址
+		CateContent    string // 单页内容
+	}{
+		Id:             "id",
+		ParentId:       "parent_id",
+		ModelId:        "model_id",
+		Status:         "status",
+		DeleteTime:     "delete_time",
+		ListOrder:      "list_order",
+		Name:           "name",
+		Alias:          "alias",
+		Description:    "description",
+		SeoTitle:       "seo_title",
+		SeoKeywords:    "seo_keywords",
+		SeoDescription: "seo_description",
+		ListTpl:        "list_tpl",
+		OneTpl:         "one_tpl",
+		More:           "more",
+		CateType:       "cate_type",
+		CateAddress:    "cate_address",
+		CateContent:    "cate_content",
+	}
 )
 
 // FindOne is a convenience method for Model.FindOne.
@@ -41,6 +82,12 @@ func FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
 	return Model.FindValue(fieldsAndWhere...)
 }
 
+// FindArray is a convenience method for Model.FindArray.
+// See Model.FindArray.
+func FindArray(fieldsAndWhere ...interface{}) ([]gdb.Value, error) {
+	return Model.FindArray(fieldsAndWhere...)
+}
+
 // FindCount is a convenience method for Model.FindCount.
 // See Model.FindCount.
 func FindCount(where ...interface{}) (int, error) {
@@ -52,6 +99,11 @@ func Insert(data ...interface{}) (result sql.Result, err error) {
 	return Model.Insert(data...)
 }
 
+// InsertIgnore is a convenience method for Model.InsertIgnore.
+func InsertIgnore(data ...interface{}) (result sql.Result, err error) {
+	return Model.InsertIgnore(data...)
+}
+
 // Replace is a convenience method for Model.Replace.
 func Replace(data ...interface{}) (result sql.Result, err error) {
 	return Model.Replace(data...)
@@ -94,18 +146,30 @@ func (m *arModel) Slave() *arModel {
 }
 
 // LeftJoin does "LEFT JOIN ... ON ..." statement on the model.
-func (m *arModel) LeftJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.LeftJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").LeftJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").LeftJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) LeftJoin(table ...string) *arModel {
+	return &arModel{m.M.LeftJoin(table...)}
 }
 
 // RightJoin does "RIGHT JOIN ... ON ..." statement on the model.
-func (m *arModel) RightJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.RightJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").RightJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").RightJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) RightJoin(table ...string) *arModel {
+	return &arModel{m.M.RightJoin(table...)}
 }
 
 // InnerJoin does "INNER JOIN ... ON ..." statement on the model.
-func (m *arModel) InnerJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.InnerJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").InnerJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").InnerJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) InnerJoin(table ...string) *arModel {
+	return &arModel{m.M.InnerJoin(table...)}
 }
 
 // Fields sets the operation fields of the model, multiple fields joined using char ','.
@@ -165,8 +229,8 @@ func (m *arModel) Group(groupBy string) *arModel {
 }
 
 // Order sets the "ORDER BY" statement for the model.
-func (m *arModel) Order(orderBy string) *arModel {
-	return &arModel{m.M.Order(orderBy)}
+func (m *arModel) Order(orderBy ...string) *arModel {
+	return &arModel{m.M.Order(orderBy...)}
 }
 
 // Limit sets the "LIMIT" statement for the model.
@@ -207,8 +271,8 @@ func (m *arModel) Batch(batch int) *arModel {
 // control the cache like changing the <duration> or clearing the cache with specified <name>.
 //
 // Note that, the cache feature is disabled if the model is operating on a transaction.
-func (m *arModel) Cache(expire time.Duration, name ...string) *arModel {
-	return &arModel{m.M.Cache(expire, name...)}
+func (m *arModel) Cache(duration time.Duration, name ...string) *arModel {
+	return &arModel{m.M.Cache(duration, name...)}
 }
 
 // Data sets the operation data for the model.
@@ -222,53 +286,6 @@ func (m *arModel) Data(data ...interface{}) *arModel {
 	return &arModel{m.M.Data(data...)}
 }
 
-// Insert does "INSERT INTO ..." statement for the model.
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Insert(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Insert(data...)
-}
-
-// Replace does "REPLACE INTO ..." statement for the model.
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Replace(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Replace(data...)
-}
-
-// Save does "INSERT INTO ... ON DUPLICATE KEY UPDATE..." statement for the model.
-// It updates the record if there's primary or unique index in the saving data,
-// or else it inserts a new record into the table.
-//
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Save(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Save(data...)
-}
-
-// Update does "UPDATE ... " statement for the model.
-//
-// If the optional parameter <dataAndWhere> is given, the dataAndWhere[0] is the updated
-// data field, and dataAndWhere[1:] is treated as where condition fields.
-// Also see Model.Data and Model.Where functions.
-func (m *arModel) Update(dataAndWhere ...interface{}) (result sql.Result, err error) {
-	return m.M.Update(dataAndWhere...)
-}
-
-// Delete does "DELETE FROM ... " statement for the model.
-// The optional parameter <where> is the same as the parameter of Model.Where function,
-// see Model.Where.
-func (m *arModel) Delete(where ...interface{}) (result sql.Result, err error) {
-	return m.M.Delete(where...)
-}
-
-// Count does "SELECT COUNT(x) FROM ..." statement for the model.
-// The optional parameter <where> is the same as the parameter of Model.Where function,
-// see Model.Where.
-func (m *arModel) Count(where ...interface{}) (int, error) {
-	return m.M.Count(where...)
-}
-
 // All does "SELECT FROM ..." statement for the model.
 // It retrieves the records from table and returns the result as []*Entity.
 // It returns nil if there's no record retrieved with the given conditions from table.
@@ -304,16 +321,6 @@ func (m *arModel) One(where ...interface{}) (*Entity, error) {
 	return entity, nil
 }
 
-// Value retrieves a specified record value from table and returns the result as interface type.
-// It returns nil if there's no record found with the given conditions from table.
-//
-// If the optional parameter <fieldsAndWhere> is given, the fieldsAndWhere[0] is the selected fields
-// and fieldsAndWhere[1:] is treated as where condition fields.
-// Also see Model.Fields and Model.Where functions.
-func (m *arModel) Value(fieldsAndWhere ...interface{}) (gdb.Value, error) {
-	return m.M.Value(fieldsAndWhere...)
-}
-
 // FindOne retrieves and returns a single Record by Model.WherePri and Model.One.
 // Also see Model.WherePri and Model.One.
 func (m *arModel) FindOne(where ...interface{}) (*Entity, error) {
@@ -342,18 +349,6 @@ func (m *arModel) FindAll(where ...interface{}) ([]*Entity, error) {
 	return entities, nil
 }
 
-// FindValue retrieves and returns single field value by Model.WherePri and Model.Value.
-// Also see Model.WherePri and Model.Value.
-func (m *arModel) FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
-	return m.M.FindValue(fieldsAndWhere...)
-}
-
-// FindCount retrieves and returns the record number by Model.WherePri and Model.Count.
-// Also see Model.WherePri and Model.Count.
-func (m *arModel) FindCount(where ...interface{}) (int, error) {
-	return m.M.FindCount(where...)
-}
-
 // Chunk iterates the table with given size and callback function.
 func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error) bool) {
 	m.M.Chunk(limit, func(result gdb.Result, err error) bool {
@@ -365,3 +360,18 @@ func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error)
 		return callback(entities, err)
 	})
 }
+
+// LockUpdate sets the lock for update for current operation.
+func (m *arModel) LockUpdate() *arModel {
+	return &arModel{m.M.LockUpdate()}
+}
+
+// LockShared sets the lock in share mode for current operation.
+func (m *arModel) LockShared() *arModel {
+	return &arModel{m.M.LockShared()}
+}
+
+// Unscoped enables/disables the soft deleting feature.
+func (m *arModel) Unscoped() *arModel {
+	return &arModel{m.M.Unscoped()}
+}

+ 5 - 0
app/model/admin/cms_category_news/cms_category_news_entity.go

@@ -27,6 +27,11 @@ func (r *Entity) Insert() (result sql.Result, err error) {
 	return Model.Data(r).Insert()
 }
 
+// InsertIgnore does "INSERT IGNORE INTO ..." statement for inserting current object into table.
+func (r *Entity) InsertIgnore() (result sql.Result, err error) {
+	return Model.Data(r).InsertIgnore()
+}
+
 // Replace does "REPLACE...INTO..." statement for inserting current object into table.
 // If there's already another same record in the table (it checks using primary key or unique index),
 // it deletes it and insert this one.

+ 60 - 80
app/model/admin/cms_category_news/cms_category_news_model.go

@@ -8,12 +8,13 @@ import (
 	"database/sql"
 	"github.com/gogf/gf/database/gdb"
 	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/frame/gmvc"
 	"time"
 )
 
 // arModel is a active record design model for table cms_category_news operations.
 type arModel struct {
-	M *gdb.Model
+	gmvc.M
 }
 
 var (
@@ -21,6 +22,16 @@ var (
 	Table = "cms_category_news"
 	// Model is the model object of cms_category_news.
 	Model = &arModel{g.DB("default").Table(Table).Safe()}
+	// Columns defines and stores column names for table cms_category_news.
+	Columns = struct {
+		Id         string //
+		NewsId     string // 文章id
+		CategoryId string // 分类id
+	}{
+		Id:         "id",
+		NewsId:     "news_id",
+		CategoryId: "category_id",
+	}
 )
 
 // FindOne is a convenience method for Model.FindOne.
@@ -41,6 +52,12 @@ func FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
 	return Model.FindValue(fieldsAndWhere...)
 }
 
+// FindArray is a convenience method for Model.FindArray.
+// See Model.FindArray.
+func FindArray(fieldsAndWhere ...interface{}) ([]gdb.Value, error) {
+	return Model.FindArray(fieldsAndWhere...)
+}
+
 // FindCount is a convenience method for Model.FindCount.
 // See Model.FindCount.
 func FindCount(where ...interface{}) (int, error) {
@@ -52,6 +69,11 @@ func Insert(data ...interface{}) (result sql.Result, err error) {
 	return Model.Insert(data...)
 }
 
+// InsertIgnore is a convenience method for Model.InsertIgnore.
+func InsertIgnore(data ...interface{}) (result sql.Result, err error) {
+	return Model.InsertIgnore(data...)
+}
+
 // Replace is a convenience method for Model.Replace.
 func Replace(data ...interface{}) (result sql.Result, err error) {
 	return Model.Replace(data...)
@@ -94,18 +116,30 @@ func (m *arModel) Slave() *arModel {
 }
 
 // LeftJoin does "LEFT JOIN ... ON ..." statement on the model.
-func (m *arModel) LeftJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.LeftJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").LeftJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").LeftJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) LeftJoin(table ...string) *arModel {
+	return &arModel{m.M.LeftJoin(table...)}
 }
 
 // RightJoin does "RIGHT JOIN ... ON ..." statement on the model.
-func (m *arModel) RightJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.RightJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").RightJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").RightJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) RightJoin(table ...string) *arModel {
+	return &arModel{m.M.RightJoin(table...)}
 }
 
 // InnerJoin does "INNER JOIN ... ON ..." statement on the model.
-func (m *arModel) InnerJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.InnerJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").InnerJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").InnerJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) InnerJoin(table ...string) *arModel {
+	return &arModel{m.M.InnerJoin(table...)}
 }
 
 // Fields sets the operation fields of the model, multiple fields joined using char ','.
@@ -165,8 +199,8 @@ func (m *arModel) Group(groupBy string) *arModel {
 }
 
 // Order sets the "ORDER BY" statement for the model.
-func (m *arModel) Order(orderBy string) *arModel {
-	return &arModel{m.M.Order(orderBy)}
+func (m *arModel) Order(orderBy ...string) *arModel {
+	return &arModel{m.M.Order(orderBy...)}
 }
 
 // Limit sets the "LIMIT" statement for the model.
@@ -207,8 +241,8 @@ func (m *arModel) Batch(batch int) *arModel {
 // control the cache like changing the <duration> or clearing the cache with specified <name>.
 //
 // Note that, the cache feature is disabled if the model is operating on a transaction.
-func (m *arModel) Cache(expire time.Duration, name ...string) *arModel {
-	return &arModel{m.M.Cache(expire, name...)}
+func (m *arModel) Cache(duration time.Duration, name ...string) *arModel {
+	return &arModel{m.M.Cache(duration, name...)}
 }
 
 // Data sets the operation data for the model.
@@ -222,53 +256,6 @@ func (m *arModel) Data(data ...interface{}) *arModel {
 	return &arModel{m.M.Data(data...)}
 }
 
-// Insert does "INSERT INTO ..." statement for the model.
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Insert(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Insert(data...)
-}
-
-// Replace does "REPLACE INTO ..." statement for the model.
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Replace(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Replace(data...)
-}
-
-// Save does "INSERT INTO ... ON DUPLICATE KEY UPDATE..." statement for the model.
-// It updates the record if there's primary or unique index in the saving data,
-// or else it inserts a new record into the table.
-//
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Save(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Save(data...)
-}
-
-// Update does "UPDATE ... " statement for the model.
-//
-// If the optional parameter <dataAndWhere> is given, the dataAndWhere[0] is the updated
-// data field, and dataAndWhere[1:] is treated as where condition fields.
-// Also see Model.Data and Model.Where functions.
-func (m *arModel) Update(dataAndWhere ...interface{}) (result sql.Result, err error) {
-	return m.M.Update(dataAndWhere...)
-}
-
-// Delete does "DELETE FROM ... " statement for the model.
-// The optional parameter <where> is the same as the parameter of Model.Where function,
-// see Model.Where.
-func (m *arModel) Delete(where ...interface{}) (result sql.Result, err error) {
-	return m.M.Delete(where...)
-}
-
-// Count does "SELECT COUNT(x) FROM ..." statement for the model.
-// The optional parameter <where> is the same as the parameter of Model.Where function,
-// see Model.Where.
-func (m *arModel) Count(where ...interface{}) (int, error) {
-	return m.M.Count(where...)
-}
-
 // All does "SELECT FROM ..." statement for the model.
 // It retrieves the records from table and returns the result as []*Entity.
 // It returns nil if there's no record retrieved with the given conditions from table.
@@ -304,16 +291,6 @@ func (m *arModel) One(where ...interface{}) (*Entity, error) {
 	return entity, nil
 }
 
-// Value retrieves a specified record value from table and returns the result as interface type.
-// It returns nil if there's no record found with the given conditions from table.
-//
-// If the optional parameter <fieldsAndWhere> is given, the fieldsAndWhere[0] is the selected fields
-// and fieldsAndWhere[1:] is treated as where condition fields.
-// Also see Model.Fields and Model.Where functions.
-func (m *arModel) Value(fieldsAndWhere ...interface{}) (gdb.Value, error) {
-	return m.M.Value(fieldsAndWhere...)
-}
-
 // FindOne retrieves and returns a single Record by Model.WherePri and Model.One.
 // Also see Model.WherePri and Model.One.
 func (m *arModel) FindOne(where ...interface{}) (*Entity, error) {
@@ -342,18 +319,6 @@ func (m *arModel) FindAll(where ...interface{}) ([]*Entity, error) {
 	return entities, nil
 }
 
-// FindValue retrieves and returns single field value by Model.WherePri and Model.Value.
-// Also see Model.WherePri and Model.Value.
-func (m *arModel) FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
-	return m.M.FindValue(fieldsAndWhere...)
-}
-
-// FindCount retrieves and returns the record number by Model.WherePri and Model.Count.
-// Also see Model.WherePri and Model.Count.
-func (m *arModel) FindCount(where ...interface{}) (int, error) {
-	return m.M.FindCount(where...)
-}
-
 // Chunk iterates the table with given size and callback function.
 func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error) bool) {
 	m.M.Chunk(limit, func(result gdb.Result, err error) bool {
@@ -365,3 +330,18 @@ func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error)
 		return callback(entities, err)
 	})
 }
+
+// LockUpdate sets the lock for update for current operation.
+func (m *arModel) LockUpdate() *arModel {
+	return &arModel{m.M.LockUpdate()}
+}
+
+// LockShared sets the lock in share mode for current operation.
+func (m *arModel) LockShared() *arModel {
+	return &arModel{m.M.LockShared()}
+}
+
+// Unscoped enables/disables the soft deleting feature.
+func (m *arModel) Unscoped() *arModel {
+	return &arModel{m.M.Unscoped()}
+}

+ 1 - 1
app/model/admin/cms_news/cms_news.go

@@ -49,7 +49,7 @@ type ReqEditParams struct {
 }
 
 //添加文章操作
-func AddNews(req *ReqAddParams, cateIds []int, userId int, tx *gdb.TX) (insId int64, err error) {
+func AddNews(req *ReqAddParams, cateIds []int, userId uint64, tx *gdb.TX) (insId int64, err error) {
 	if len(cateIds) == 0 {
 		err = gerror.New("栏目不能为空")
 		return

+ 2 - 2
app/model/admin/model_info/model_info.go

@@ -21,7 +21,7 @@ type AddReq struct {
 	ModelTitle      string `p:"modelTitle"  v:"required#模型名称不能为空"`
 	ModelStatus     uint   `p:"modelStatus" v:"required#状态不能为空"`
 	ModelEngine     string `p:"modelEngine" `
-	CreateBy        int    //添加人
+	CreateBy        uint64 //添加人
 }
 
 // EditReq 用于存储修改请求参数
@@ -32,7 +32,7 @@ type EditReq struct {
 	ModelTitle      string `p:"modelTitle" `
 	ModelStatus     int    `p:"modelStatus" v:"required#状态不能为空"`
 	ModelEngine     string `p:"modelEngine" `
-	UpdateBy        int
+	UpdateBy        uint64
 }
 
 //模型字段属性修改请求参数

+ 2 - 2
app/model/admin/role/role.go

@@ -30,7 +30,7 @@ type SelectPageReq struct {
 //修改状态参数
 type StatusSetReq struct {
 	RoleId uint `p:"roleId" v:"required#角色ID不能为空"`
-	Status int  `p:"status" v:"required#状态不能为空"`
+	Status uint `p:"status" v:"required#状态不能为空"`
 }
 
 //角色数据授权参数
@@ -90,7 +90,7 @@ func GetList() (list []*Entity, err error) {
 		return
 	}
 	//从数据库获取
-	list, err = Model.OrderBy("list_order asc,id asc").All()
+	list, err = Model.Order("list_order asc,id asc").All()
 	//缓存数据
 	cache.Set(cache_service.AdminAuthRole, list, 0, cache_service.AdminAuthTag)
 	return

+ 14 - 12
app/model/admin/role/role_entity.go

@@ -9,21 +9,18 @@ import (
 	"github.com/gogf/gf/database/gdb"
 )
 
-// Entity is the golang structure for table _role.
+// Entity is the golang structure for table role.
 type Entity struct {
-	Id         int     `orm:"id,primary"  json:"id"`             //
-	Status     int     `orm:"status"      json:"status"`         // 状态;0:禁用;1:正常
-	CreateTime int     `orm:"create_time" json:"create_time"`    // 创建时间
-	UpdateTime int     `orm:"update_time" json:"update_time"`    // 更新时间
-	ListOrder  float64 `orm:"list_order"  json:"list_order"`     // 排序
-	Name       string  `orm:"name"        json:"name"`           // 角色名称
-	Remark     string  `orm:"remark"      json:"remark"`         // 备注
-	DataScope  int     `orm:"data_scope"      json:"data_scope"` // 数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)
+	Id         uint    `orm:"id,primary"  json:"id"`          //
+	Status     uint    `orm:"status"      json:"status"`      // 状态;0:禁用;1:正常
+	CreateTime uint    `orm:"create_time" json:"create_time"` // 创建时间
+	UpdateTime uint    `orm:"update_time" json:"update_time"` // 更新时间
+	ListOrder  float64 `orm:"list_order"  json:"list_order"`  // 排序
+	Name       string  `orm:"name"        json:"name"`        // 角色名称
+	Remark     string  `orm:"remark"      json:"remark"`      // 备注
+	DataScope  uint    `orm:"data_scope"  json:"data_scope"`  // 数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)
 }
 
-// Role is alias of Entity, which some developers say they just want.
-type Role = Entity
-
 // OmitEmpty sets OPTION_OMITEMPTY option for the model, which automatically filers
 // the data and where attributes for empty values.
 func (r *Entity) OmitEmpty() *arModel {
@@ -35,6 +32,11 @@ func (r *Entity) Insert() (result sql.Result, err error) {
 	return Model.Data(r).Insert()
 }
 
+// InsertIgnore does "INSERT IGNORE INTO ..." statement for inserting current object into table.
+func (r *Entity) InsertIgnore() (result sql.Result, err error) {
+	return Model.Data(r).InsertIgnore()
+}
+
 // Replace does "REPLACE...INTO..." statement for inserting current object into table.
 // If there's already another same record in the table (it checks using primary key or unique index),
 // it deletes it and insert this one.

+ 166 - 69
app/model/admin/role/role_model.go

@@ -8,21 +8,107 @@ import (
 	"database/sql"
 	"github.com/gogf/gf/database/gdb"
 	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/frame/gmvc"
 	"time"
 )
 
-// arModel is a active record design model for table _role operations.
+// arModel is a active record design model for table role operations.
 type arModel struct {
-	M *gdb.Model
+	gmvc.M
 }
 
 var (
-	// Table is the table name of _role.
+	// Table is the table name of role.
 	Table = "role"
-	// Model is the model object of _role.
+	// Model is the model object of role.
 	Model = &arModel{g.DB("default").Table(Table).Safe()}
+	// Columns defines and stores column names for table role.
+	Columns = struct {
+		Id         string //
+		Status     string // 状态;0:禁用;1:正常
+		CreateTime string // 创建时间
+		UpdateTime string // 更新时间
+		ListOrder  string // 排序
+		Name       string // 角色名称
+		Remark     string // 备注
+		DataScope  string // 数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)
+	}{
+		Id:         "id",
+		Status:     "status",
+		CreateTime: "create_time",
+		UpdateTime: "update_time",
+		ListOrder:  "list_order",
+		Name:       "name",
+		Remark:     "remark",
+		DataScope:  "data_scope",
+	}
 )
 
+// FindOne is a convenience method for Model.FindOne.
+// See Model.FindOne.
+func FindOne(where ...interface{}) (*Entity, error) {
+	return Model.FindOne(where...)
+}
+
+// FindAll is a convenience method for Model.FindAll.
+// See Model.FindAll.
+func FindAll(where ...interface{}) ([]*Entity, error) {
+	return Model.FindAll(where...)
+}
+
+// FindValue is a convenience method for Model.FindValue.
+// See Model.FindValue.
+func FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
+	return Model.FindValue(fieldsAndWhere...)
+}
+
+// FindArray is a convenience method for Model.FindArray.
+// See Model.FindArray.
+func FindArray(fieldsAndWhere ...interface{}) ([]gdb.Value, error) {
+	return Model.FindArray(fieldsAndWhere...)
+}
+
+// FindCount is a convenience method for Model.FindCount.
+// See Model.FindCount.
+func FindCount(where ...interface{}) (int, error) {
+	return Model.FindCount(where...)
+}
+
+// Insert is a convenience method for Model.Insert.
+func Insert(data ...interface{}) (result sql.Result, err error) {
+	return Model.Insert(data...)
+}
+
+// InsertIgnore is a convenience method for Model.InsertIgnore.
+func InsertIgnore(data ...interface{}) (result sql.Result, err error) {
+	return Model.InsertIgnore(data...)
+}
+
+// Replace is a convenience method for Model.Replace.
+func Replace(data ...interface{}) (result sql.Result, err error) {
+	return Model.Replace(data...)
+}
+
+// Save is a convenience method for Model.Save.
+func Save(data ...interface{}) (result sql.Result, err error) {
+	return Model.Save(data...)
+}
+
+// Update is a convenience method for Model.Update.
+func Update(dataAndWhere ...interface{}) (result sql.Result, err error) {
+	return Model.Update(dataAndWhere...)
+}
+
+// Delete is a convenience method for Model.Delete.
+func Delete(where ...interface{}) (result sql.Result, err error) {
+	return Model.Delete(where...)
+}
+
+// As sets an alias name for current table.
+func (m *arModel) As(as string) *arModel {
+	return &arModel{m.M.As(as)}
+}
+
 // TX sets the transaction for current operation.
 func (m *arModel) TX(tx *gdb.TX) *arModel {
 	return &arModel{m.M.TX(tx)}
@@ -40,18 +126,30 @@ func (m *arModel) Slave() *arModel {
 }
 
 // LeftJoin does "LEFT JOIN ... ON ..." statement on the model.
-func (m *arModel) LeftJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.LeftJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").LeftJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").LeftJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) LeftJoin(table ...string) *arModel {
+	return &arModel{m.M.LeftJoin(table...)}
 }
 
 // RightJoin does "RIGHT JOIN ... ON ..." statement on the model.
-func (m *arModel) RightJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.RightJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").RightJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").RightJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) RightJoin(table ...string) *arModel {
+	return &arModel{m.M.RightJoin(table...)}
 }
 
 // InnerJoin does "INNER JOIN ... ON ..." statement on the model.
-func (m *arModel) InnerJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.InnerJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").InnerJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").InnerJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) InnerJoin(table ...string) *arModel {
+	return &arModel{m.M.InnerJoin(table...)}
 }
 
 // Fields sets the operation fields of the model, multiple fields joined using char ','.
@@ -105,14 +203,14 @@ func (m *arModel) Or(where interface{}, args ...interface{}) *arModel {
 	return &arModel{m.M.Or(where, args...)}
 }
 
-// GroupBy sets the "GROUP BY" statement for the model.
-func (m *arModel) GroupBy(groupBy string) *arModel {
-	return &arModel{m.M.GroupBy(groupBy)}
+// Group sets the "GROUP BY" statement for the model.
+func (m *arModel) Group(groupBy string) *arModel {
+	return &arModel{m.M.Group(groupBy)}
 }
 
-// OrderBy sets the "ORDER BY" statement for the model.
-func (m *arModel) OrderBy(orderBy string) *arModel {
-	return &arModel{m.M.OrderBy(orderBy)}
+// Order sets the "ORDER BY" statement for the model.
+func (m *arModel) Order(orderBy ...string) *arModel {
+	return &arModel{m.M.Order(orderBy...)}
 }
 
 // Limit sets the "LIMIT" statement for the model.
@@ -129,11 +227,11 @@ func (m *arModel) Offset(offset int) *arModel {
 	return &arModel{m.M.Offset(offset)}
 }
 
-// ForPage sets the paging number for the model.
+// Page sets the paging number for the model.
 // The parameter <page> is started from 1 for paging.
 // Note that, it differs that the Limit function start from 0 for "LIMIT" statement.
-func (m *arModel) ForPage(page, limit int) *arModel {
-	return &arModel{m.M.ForPage(page, limit)}
+func (m *arModel) Page(page, limit int) *arModel {
+	return &arModel{m.M.Page(page, limit)}
 }
 
 // Batch sets the batch operation number for the model.
@@ -153,8 +251,8 @@ func (m *arModel) Batch(batch int) *arModel {
 // control the cache like changing the <duration> or clearing the cache with specified <name>.
 //
 // Note that, the cache feature is disabled if the model is operating on a transaction.
-func (m *arModel) Cache(expire time.Duration, name ...string) *arModel {
-	return &arModel{m.M.Cache(expire, name...)}
+func (m *arModel) Cache(duration time.Duration, name ...string) *arModel {
+	return &arModel{m.M.Cache(duration, name...)}
 }
 
 // Data sets the operation data for the model.
@@ -168,43 +266,14 @@ func (m *arModel) Data(data ...interface{}) *arModel {
 	return &arModel{m.M.Data(data...)}
 }
 
-// Insert does "INSERT INTO ..." statement for the model.
-func (m *arModel) Insert() (result sql.Result, err error) {
-	return m.M.Insert()
-}
-
-// Replace does "REPLACE INTO ..." statement for the model.
-func (m *arModel) Replace() (result sql.Result, err error) {
-	return m.M.Replace()
-}
-
-// Save does "INSERT INTO ... ON DUPLICATE KEY UPDATE..." statement for the model.
-// It updates the record if there's primary or unique index in the saving data,
-// or else it inserts a new record into the table.
-func (m *arModel) Save() (result sql.Result, err error) {
-	return m.M.Save()
-}
-
-// Update does "UPDATE ... " statement for the model.
-func (m *arModel) Update() (result sql.Result, err error) {
-	return m.M.Update()
-}
-
-// Delete does "DELETE FROM ... " statement for the model.
-func (m *arModel) Delete() (result sql.Result, err error) {
-	return m.M.Delete()
-}
-
-// Count does "SELECT COUNT(x) FROM ..." statement for the model.
-func (m *arModel) Count() (int, error) {
-	return m.M.Count()
-}
-
 // All does "SELECT FROM ..." statement for the model.
 // It retrieves the records from table and returns the result as []*Entity.
 // It returns nil if there's no record retrieved with the given conditions from table.
-func (m *arModel) All() ([]*Entity, error) {
-	all, err := m.M.All()
+//
+// The optional parameter <where> is the same as the parameter of Model.Where function,
+// see Model.Where.
+func (m *arModel) All(where ...interface{}) ([]*Entity, error) {
+	all, err := m.M.All(where...)
 	if err != nil {
 		return nil, err
 	}
@@ -217,8 +286,25 @@ func (m *arModel) All() ([]*Entity, error) {
 
 // One retrieves one record from table and returns the result as *Entity.
 // It returns nil if there's no record retrieved with the given conditions from table.
-func (m *arModel) One() (*Entity, error) {
-	one, err := m.M.One()
+//
+// The optional parameter <where> is the same as the parameter of Model.Where function,
+// see Model.Where.
+func (m *arModel) One(where ...interface{}) (*Entity, error) {
+	one, err := m.M.One(where...)
+	if err != nil {
+		return nil, err
+	}
+	var entity *Entity
+	if err = one.Struct(&entity); err != nil && err != sql.ErrNoRows {
+		return nil, err
+	}
+	return entity, nil
+}
+
+// FindOne retrieves and returns a single Record by Model.WherePri and Model.One.
+// Also see Model.WherePri and Model.One.
+func (m *arModel) FindOne(where ...interface{}) (*Entity, error) {
+	one, err := m.M.FindOne(where...)
 	if err != nil {
 		return nil, err
 	}
@@ -229,10 +315,18 @@ func (m *arModel) One() (*Entity, error) {
 	return entity, nil
 }
 
-// Value retrieves a specified record value from table and returns the result as interface type.
-// It returns nil if there's no record found with the given conditions from table.
-func (m *arModel) Value() (gdb.Value, error) {
-	return m.M.Value()
+// FindAll retrieves and returns Result by by Model.WherePri and Model.All.
+// Also see Model.WherePri and Model.All.
+func (m *arModel) FindAll(where ...interface{}) ([]*Entity, error) {
+	all, err := m.M.FindAll(where...)
+	if err != nil {
+		return nil, err
+	}
+	var entities []*Entity
+	if err = all.Structs(&entities); err != nil && err != sql.ErrNoRows {
+		return nil, err
+	}
+	return entities, nil
 }
 
 // Chunk iterates the table with given size and callback function.
@@ -247,14 +341,17 @@ func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error)
 	})
 }
 
-// Page sets the paging number for the model.
-// The parameter <page> is started from 1 for paging.
-// Note that, it differs that the Limit function start from 0 for "LIMIT" statement.
-func (m *arModel) Page(page, limit int) *arModel {
-	return &arModel{m.M.Page(page, limit)}
+// LockUpdate sets the lock for update for current operation.
+func (m *arModel) LockUpdate() *arModel {
+	return &arModel{m.M.LockUpdate()}
 }
 
-// Order sets the "ORDER BY" statement for the model.
-func (m *arModel) Order(orderBy string) *arModel {
-	return &arModel{m.M.Order(orderBy)}
+// LockShared sets the lock in share mode for current operation.
+func (m *arModel) LockShared() *arModel {
+	return &arModel{m.M.LockShared()}
+}
+
+// Unscoped enables/disables the soft deleting feature.
+func (m *arModel) Unscoped() *arModel {
+	return &arModel{m.M.Unscoped()}
 }

+ 2 - 2
app/model/admin/sys_config/sys_config.go

@@ -37,7 +37,7 @@ type SelectPageReq struct {
 }
 
 //保存参数
-func AddSave(req *AddReq, userId int) (id int64, err error) {
+func AddSave(req *AddReq, userId uint64) (id int64, err error) {
 	var entity Entity
 	entity.ConfigName = req.ConfigName
 	entity.ConfigKey = req.ConfigKey
@@ -62,7 +62,7 @@ func AddSave(req *AddReq, userId int) (id int64, err error) {
 }
 
 //修改保存
-func EditSave(req *EditReq, userId int) (int64, error) {
+func EditSave(req *EditReq, userId uint64) (int64, error) {
 	entity, err := GetParamsById(gconv.Int(req.ConfigId))
 	if err != nil {
 		return 0, err

+ 6 - 1
app/model/admin/sys_config/sys_config_entity.go

@@ -13,7 +13,7 @@ import (
 type Entity struct {
 	ConfigId    uint   `orm:"config_id,primary" json:"config_id"`    // 参数主键
 	ConfigName  string `orm:"config_name"       json:"config_name"`  // 参数名称
-	ConfigKey   string `orm:"config_key"        json:"config_key"`   // 参数键名
+	ConfigKey   string `orm:"config_key,unique" json:"config_key"`   // 参数键名
 	ConfigValue string `orm:"config_value"      json:"config_value"` // 参数键值
 	ConfigType  int    `orm:"config_type"       json:"config_type"`  // 系统内置(Y是 N否)
 	CreateBy    uint   `orm:"create_by"         json:"create_by"`    // 创建者
@@ -34,6 +34,11 @@ func (r *Entity) Insert() (result sql.Result, err error) {
 	return Model.Data(r).Insert()
 }
 
+// InsertIgnore does "INSERT IGNORE INTO ..." statement for inserting current object into table.
+func (r *Entity) InsertIgnore() (result sql.Result, err error) {
+	return Model.Data(r).InsertIgnore()
+}
+
 // Replace does "REPLACE...INTO..." statement for inserting current object into table.
 // If there's already another same record in the table (it checks using primary key or unique index),
 // it deletes it and insert this one.

+ 74 - 80
app/model/admin/sys_config/sys_config_model.go

@@ -8,12 +8,13 @@ import (
 	"database/sql"
 	"github.com/gogf/gf/database/gdb"
 	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/frame/gmvc"
 	"time"
 )
 
 // arModel is a active record design model for table sys_config operations.
 type arModel struct {
-	M *gdb.Model
+	gmvc.M
 }
 
 var (
@@ -21,6 +22,30 @@ var (
 	Table = "sys_config"
 	// Model is the model object of sys_config.
 	Model = &arModel{g.DB("default").Table(Table).Safe()}
+	// Columns defines and stores column names for table sys_config.
+	Columns = struct {
+		ConfigId    string // 参数主键
+		ConfigName  string // 参数名称
+		ConfigKey   string // 参数键名
+		ConfigValue string // 参数键值
+		ConfigType  string // 系统内置(Y是 N否)
+		CreateBy    string // 创建者
+		CreateTime  string // 创建时间
+		UpdateBy    string // 更新者
+		UpdateTime  string // 更新时间
+		Remark      string // 备注
+	}{
+		ConfigId:    "config_id",
+		ConfigName:  "config_name",
+		ConfigKey:   "config_key",
+		ConfigValue: "config_value",
+		ConfigType:  "config_type",
+		CreateBy:    "create_by",
+		CreateTime:  "create_time",
+		UpdateBy:    "update_by",
+		UpdateTime:  "update_time",
+		Remark:      "remark",
+	}
 )
 
 // FindOne is a convenience method for Model.FindOne.
@@ -41,6 +66,12 @@ func FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
 	return Model.FindValue(fieldsAndWhere...)
 }
 
+// FindArray is a convenience method for Model.FindArray.
+// See Model.FindArray.
+func FindArray(fieldsAndWhere ...interface{}) ([]gdb.Value, error) {
+	return Model.FindArray(fieldsAndWhere...)
+}
+
 // FindCount is a convenience method for Model.FindCount.
 // See Model.FindCount.
 func FindCount(where ...interface{}) (int, error) {
@@ -52,6 +83,11 @@ func Insert(data ...interface{}) (result sql.Result, err error) {
 	return Model.Insert(data...)
 }
 
+// InsertIgnore is a convenience method for Model.InsertIgnore.
+func InsertIgnore(data ...interface{}) (result sql.Result, err error) {
+	return Model.InsertIgnore(data...)
+}
+
 // Replace is a convenience method for Model.Replace.
 func Replace(data ...interface{}) (result sql.Result, err error) {
 	return Model.Replace(data...)
@@ -94,18 +130,30 @@ func (m *arModel) Slave() *arModel {
 }
 
 // LeftJoin does "LEFT JOIN ... ON ..." statement on the model.
-func (m *arModel) LeftJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.LeftJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").LeftJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").LeftJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) LeftJoin(table ...string) *arModel {
+	return &arModel{m.M.LeftJoin(table...)}
 }
 
 // RightJoin does "RIGHT JOIN ... ON ..." statement on the model.
-func (m *arModel) RightJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.RightJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").RightJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").RightJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) RightJoin(table ...string) *arModel {
+	return &arModel{m.M.RightJoin(table...)}
 }
 
 // InnerJoin does "INNER JOIN ... ON ..." statement on the model.
-func (m *arModel) InnerJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.InnerJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").InnerJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").InnerJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) InnerJoin(table ...string) *arModel {
+	return &arModel{m.M.InnerJoin(table...)}
 }
 
 // Fields sets the operation fields of the model, multiple fields joined using char ','.
@@ -165,8 +213,8 @@ func (m *arModel) Group(groupBy string) *arModel {
 }
 
 // Order sets the "ORDER BY" statement for the model.
-func (m *arModel) Order(orderBy string) *arModel {
-	return &arModel{m.M.Order(orderBy)}
+func (m *arModel) Order(orderBy ...string) *arModel {
+	return &arModel{m.M.Order(orderBy...)}
 }
 
 // Limit sets the "LIMIT" statement for the model.
@@ -207,8 +255,8 @@ func (m *arModel) Batch(batch int) *arModel {
 // control the cache like changing the <duration> or clearing the cache with specified <name>.
 //
 // Note that, the cache feature is disabled if the model is operating on a transaction.
-func (m *arModel) Cache(expire time.Duration, name ...string) *arModel {
-	return &arModel{m.M.Cache(expire, name...)}
+func (m *arModel) Cache(duration time.Duration, name ...string) *arModel {
+	return &arModel{m.M.Cache(duration, name...)}
 }
 
 // Data sets the operation data for the model.
@@ -222,53 +270,6 @@ func (m *arModel) Data(data ...interface{}) *arModel {
 	return &arModel{m.M.Data(data...)}
 }
 
-// Insert does "INSERT INTO ..." statement for the model.
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Insert(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Insert(data...)
-}
-
-// Replace does "REPLACE INTO ..." statement for the model.
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Replace(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Replace(data...)
-}
-
-// Save does "INSERT INTO ... ON DUPLICATE KEY UPDATE..." statement for the model.
-// It updates the record if there's primary or unique index in the saving data,
-// or else it inserts a new record into the table.
-//
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Save(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Save(data...)
-}
-
-// Update does "UPDATE ... " statement for the model.
-//
-// If the optional parameter <dataAndWhere> is given, the dataAndWhere[0] is the updated
-// data field, and dataAndWhere[1:] is treated as where condition fields.
-// Also see Model.Data and Model.Where functions.
-func (m *arModel) Update(dataAndWhere ...interface{}) (result sql.Result, err error) {
-	return m.M.Update(dataAndWhere...)
-}
-
-// Delete does "DELETE FROM ... " statement for the model.
-// The optional parameter <where> is the same as the parameter of Model.Where function,
-// see Model.Where.
-func (m *arModel) Delete(where ...interface{}) (result sql.Result, err error) {
-	return m.M.Delete(where...)
-}
-
-// Count does "SELECT COUNT(x) FROM ..." statement for the model.
-// The optional parameter <where> is the same as the parameter of Model.Where function,
-// see Model.Where.
-func (m *arModel) Count(where ...interface{}) (int, error) {
-	return m.M.Count(where...)
-}
-
 // All does "SELECT FROM ..." statement for the model.
 // It retrieves the records from table and returns the result as []*Entity.
 // It returns nil if there's no record retrieved with the given conditions from table.
@@ -304,16 +305,6 @@ func (m *arModel) One(where ...interface{}) (*Entity, error) {
 	return entity, nil
 }
 
-// Value retrieves a specified record value from table and returns the result as interface type.
-// It returns nil if there's no record found with the given conditions from table.
-//
-// If the optional parameter <fieldsAndWhere> is given, the fieldsAndWhere[0] is the selected fields
-// and fieldsAndWhere[1:] is treated as where condition fields.
-// Also see Model.Fields and Model.Where functions.
-func (m *arModel) Value(fieldsAndWhere ...interface{}) (gdb.Value, error) {
-	return m.M.Value(fieldsAndWhere...)
-}
-
 // FindOne retrieves and returns a single Record by Model.WherePri and Model.One.
 // Also see Model.WherePri and Model.One.
 func (m *arModel) FindOne(where ...interface{}) (*Entity, error) {
@@ -342,18 +333,6 @@ func (m *arModel) FindAll(where ...interface{}) ([]*Entity, error) {
 	return entities, nil
 }
 
-// FindValue retrieves and returns single field value by Model.WherePri and Model.Value.
-// Also see Model.WherePri and Model.Value.
-func (m *arModel) FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
-	return m.M.FindValue(fieldsAndWhere...)
-}
-
-// FindCount retrieves and returns the record number by Model.WherePri and Model.Count.
-// Also see Model.WherePri and Model.Count.
-func (m *arModel) FindCount(where ...interface{}) (int, error) {
-	return m.M.FindCount(where...)
-}
-
 // Chunk iterates the table with given size and callback function.
 func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error) bool) {
 	m.M.Chunk(limit, func(result gdb.Result, err error) bool {
@@ -365,3 +344,18 @@ func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error)
 		return callback(entities, err)
 	})
 }
+
+// LockUpdate sets the lock for update for current operation.
+func (m *arModel) LockUpdate() *arModel {
+	return &arModel{m.M.LockUpdate()}
+}
+
+// LockShared sets the lock in share mode for current operation.
+func (m *arModel) LockShared() *arModel {
+	return &arModel{m.M.LockShared()}
+}
+
+// Unscoped enables/disables the soft deleting feature.
+func (m *arModel) Unscoped() *arModel {
+	return &arModel{m.M.Unscoped()}
+}

+ 2 - 2
app/model/admin/sys_dept/sys_dept.go

@@ -21,7 +21,7 @@ type Dept struct {
 	Remark      string                 `json:"remark"`
 	DataScope   interface{}            `json:"dataScope"`
 	Params      map[string]interface{} `json:"params"`
-	DeptID      int64                  `json:"deptId" orm:"dept_id"`
+	DeptID      uint64                 `json:"deptId" orm:"dept_id"`
 	ParentID    int64                  `json:"parentId" orm:"parent_id"`
 	Ancestors   string                 `json:"ancestors" orm:"ancestors"`
 	DeptName    string                 `json:"deptName" orm:"dept_name"`
@@ -120,7 +120,7 @@ func DelDept(id int64) error {
 }
 
 //根据部门id获取部门信息
-func GetDeptById(id int64) (*Dept, error) {
+func GetDeptById(id uint64) (*Dept, error) {
 
 	dept := (*Dept)(nil)
 

+ 2 - 2
app/model/admin/sys_dict_data/sys_dict_data.go

@@ -38,7 +38,7 @@ type SelectDataPageReq struct {
 }
 
 //添加字典数据操作
-func AddSaveData(req *AddDataReq, userId int) (int64, error) {
+func AddSaveData(req *AddDataReq, userId uint64) (int64, error) {
 	var entity Entity
 	entity.DictType = req.DictType
 	entity.Status = req.Status
@@ -80,7 +80,7 @@ func GetById(dictCode int) (*Entity, error) {
 }
 
 //修改字典数据操作
-func EditSaveData(req *EditDataReq, userId int) (int64, error) {
+func EditSaveData(req *EditDataReq, userId uint64) (int64, error) {
 	entity, err := GetById(req.DictCode)
 	if err != nil {
 		return 0, err

+ 7 - 2
app/model/admin/sys_dict_data/sys_dict_data_entity.go

@@ -20,9 +20,9 @@ type Entity struct {
 	ListClass  string `orm:"list_class"        json:"list_class"`  // 表格回显样式
 	IsDefault  int    `orm:"is_default"        json:"is_default"`  // 是否默认(1是 0否)
 	Status     int    `orm:"status"            json:"status"`      // 状态(0正常 1停用)
-	CreateBy   int    `orm:"create_by"         json:"create_by"`   // 创建者
+	CreateBy   uint64 `orm:"create_by"         json:"create_by"`   // 创建者
 	CreateTime uint64 `orm:"create_time"       json:"create_time"` // 创建时间
-	UpdateBy   int    `orm:"update_by"         json:"update_by"`   // 更新者
+	UpdateBy   uint64 `orm:"update_by"         json:"update_by"`   // 更新者
 	UpdateTime uint64 `orm:"update_time"       json:"update_time"` // 更新时间
 	Remark     string `orm:"remark"            json:"remark"`      // 备注
 }
@@ -38,6 +38,11 @@ func (r *Entity) Insert() (result sql.Result, err error) {
 	return Model.Data(r).Insert()
 }
 
+// InsertIgnore does "INSERT IGNORE INTO ..." statement for inserting current object into table.
+func (r *Entity) InsertIgnore() (result sql.Result, err error) {
+	return Model.Data(r).InsertIgnore()
+}
+
 // Replace does "REPLACE...INTO..." statement for inserting current object into table.
 // If there's already another same record in the table (it checks using primary key or unique index),
 // it deletes it and insert this one.

+ 82 - 80
app/model/admin/sys_dict_data/sys_dict_data_model.go

@@ -8,12 +8,13 @@ import (
 	"database/sql"
 	"github.com/gogf/gf/database/gdb"
 	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/frame/gmvc"
 	"time"
 )
 
 // arModel is a active record design model for table sys_dict_data operations.
 type arModel struct {
-	M *gdb.Model
+	gmvc.M
 }
 
 var (
@@ -21,6 +22,38 @@ var (
 	Table = "sys_dict_data"
 	// Model is the model object of sys_dict_data.
 	Model = &arModel{g.DB("default").Table(Table).Safe()}
+	// Columns defines and stores column names for table sys_dict_data.
+	Columns = struct {
+		DictCode   string // 字典编码
+		DictSort   string // 字典排序
+		DictLabel  string // 字典标签
+		DictValue  string // 字典键值
+		DictType   string // 字典类型
+		CssClass   string // 样式属性(其他样式扩展)
+		ListClass  string // 表格回显样式
+		IsDefault  string // 是否默认(1是 0否)
+		Status     string // 状态(0正常 1停用)
+		CreateBy   string // 创建者
+		CreateTime string // 创建时间
+		UpdateBy   string // 更新者
+		UpdateTime string // 更新时间
+		Remark     string // 备注
+	}{
+		DictCode:   "dict_code",
+		DictSort:   "dict_sort",
+		DictLabel:  "dict_label",
+		DictValue:  "dict_value",
+		DictType:   "dict_type",
+		CssClass:   "css_class",
+		ListClass:  "list_class",
+		IsDefault:  "is_default",
+		Status:     "status",
+		CreateBy:   "create_by",
+		CreateTime: "create_time",
+		UpdateBy:   "update_by",
+		UpdateTime: "update_time",
+		Remark:     "remark",
+	}
 )
 
 // FindOne is a convenience method for Model.FindOne.
@@ -41,6 +74,12 @@ func FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
 	return Model.FindValue(fieldsAndWhere...)
 }
 
+// FindArray is a convenience method for Model.FindArray.
+// See Model.FindArray.
+func FindArray(fieldsAndWhere ...interface{}) ([]gdb.Value, error) {
+	return Model.FindArray(fieldsAndWhere...)
+}
+
 // FindCount is a convenience method for Model.FindCount.
 // See Model.FindCount.
 func FindCount(where ...interface{}) (int, error) {
@@ -52,6 +91,11 @@ func Insert(data ...interface{}) (result sql.Result, err error) {
 	return Model.Insert(data...)
 }
 
+// InsertIgnore is a convenience method for Model.InsertIgnore.
+func InsertIgnore(data ...interface{}) (result sql.Result, err error) {
+	return Model.InsertIgnore(data...)
+}
+
 // Replace is a convenience method for Model.Replace.
 func Replace(data ...interface{}) (result sql.Result, err error) {
 	return Model.Replace(data...)
@@ -94,18 +138,30 @@ func (m *arModel) Slave() *arModel {
 }
 
 // LeftJoin does "LEFT JOIN ... ON ..." statement on the model.
-func (m *arModel) LeftJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.LeftJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").LeftJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").LeftJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) LeftJoin(table ...string) *arModel {
+	return &arModel{m.M.LeftJoin(table...)}
 }
 
 // RightJoin does "RIGHT JOIN ... ON ..." statement on the model.
-func (m *arModel) RightJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.RightJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").RightJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").RightJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) RightJoin(table ...string) *arModel {
+	return &arModel{m.M.RightJoin(table...)}
 }
 
 // InnerJoin does "INNER JOIN ... ON ..." statement on the model.
-func (m *arModel) InnerJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.InnerJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").InnerJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").InnerJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) InnerJoin(table ...string) *arModel {
+	return &arModel{m.M.InnerJoin(table...)}
 }
 
 // Fields sets the operation fields of the model, multiple fields joined using char ','.
@@ -165,8 +221,8 @@ func (m *arModel) Group(groupBy string) *arModel {
 }
 
 // Order sets the "ORDER BY" statement for the model.
-func (m *arModel) Order(orderBy string) *arModel {
-	return &arModel{m.M.Order(orderBy)}
+func (m *arModel) Order(orderBy ...string) *arModel {
+	return &arModel{m.M.Order(orderBy...)}
 }
 
 // Limit sets the "LIMIT" statement for the model.
@@ -207,8 +263,8 @@ func (m *arModel) Batch(batch int) *arModel {
 // control the cache like changing the <duration> or clearing the cache with specified <name>.
 //
 // Note that, the cache feature is disabled if the model is operating on a transaction.
-func (m *arModel) Cache(expire time.Duration, name ...string) *arModel {
-	return &arModel{m.M.Cache(expire, name...)}
+func (m *arModel) Cache(duration time.Duration, name ...string) *arModel {
+	return &arModel{m.M.Cache(duration, name...)}
 }
 
 // Data sets the operation data for the model.
@@ -222,53 +278,6 @@ func (m *arModel) Data(data ...interface{}) *arModel {
 	return &arModel{m.M.Data(data...)}
 }
 
-// Insert does "INSERT INTO ..." statement for the model.
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Insert(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Insert(data...)
-}
-
-// Replace does "REPLACE INTO ..." statement for the model.
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Replace(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Replace(data...)
-}
-
-// Save does "INSERT INTO ... ON DUPLICATE KEY UPDATE..." statement for the model.
-// It updates the record if there's primary or unique index in the saving data,
-// or else it inserts a new record into the table.
-//
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Save(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Save(data...)
-}
-
-// Update does "UPDATE ... " statement for the model.
-//
-// If the optional parameter <dataAndWhere> is given, the dataAndWhere[0] is the updated
-// data field, and dataAndWhere[1:] is treated as where condition fields.
-// Also see Model.Data and Model.Where functions.
-func (m *arModel) Update(dataAndWhere ...interface{}) (result sql.Result, err error) {
-	return m.M.Update(dataAndWhere...)
-}
-
-// Delete does "DELETE FROM ... " statement for the model.
-// The optional parameter <where> is the same as the parameter of Model.Where function,
-// see Model.Where.
-func (m *arModel) Delete(where ...interface{}) (result sql.Result, err error) {
-	return m.M.Delete(where...)
-}
-
-// Count does "SELECT COUNT(x) FROM ..." statement for the model.
-// The optional parameter <where> is the same as the parameter of Model.Where function,
-// see Model.Where.
-func (m *arModel) Count(where ...interface{}) (int, error) {
-	return m.M.Count(where...)
-}
-
 // All does "SELECT FROM ..." statement for the model.
 // It retrieves the records from table and returns the result as []*Entity.
 // It returns nil if there's no record retrieved with the given conditions from table.
@@ -304,16 +313,6 @@ func (m *arModel) One(where ...interface{}) (*Entity, error) {
 	return entity, nil
 }
 
-// Value retrieves a specified record value from table and returns the result as interface type.
-// It returns nil if there's no record found with the given conditions from table.
-//
-// If the optional parameter <fieldsAndWhere> is given, the fieldsAndWhere[0] is the selected fields
-// and fieldsAndWhere[1:] is treated as where condition fields.
-// Also see Model.Fields and Model.Where functions.
-func (m *arModel) Value(fieldsAndWhere ...interface{}) (gdb.Value, error) {
-	return m.M.Value(fieldsAndWhere...)
-}
-
 // FindOne retrieves and returns a single Record by Model.WherePri and Model.One.
 // Also see Model.WherePri and Model.One.
 func (m *arModel) FindOne(where ...interface{}) (*Entity, error) {
@@ -342,18 +341,6 @@ func (m *arModel) FindAll(where ...interface{}) ([]*Entity, error) {
 	return entities, nil
 }
 
-// FindValue retrieves and returns single field value by Model.WherePri and Model.Value.
-// Also see Model.WherePri and Model.Value.
-func (m *arModel) FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
-	return m.M.FindValue(fieldsAndWhere...)
-}
-
-// FindCount retrieves and returns the record number by Model.WherePri and Model.Count.
-// Also see Model.WherePri and Model.Count.
-func (m *arModel) FindCount(where ...interface{}) (int, error) {
-	return m.M.FindCount(where...)
-}
-
 // Chunk iterates the table with given size and callback function.
 func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error) bool) {
 	m.M.Chunk(limit, func(result gdb.Result, err error) bool {
@@ -365,3 +352,18 @@ func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error)
 		return callback(entities, err)
 	})
 }
+
+// LockUpdate sets the lock for update for current operation.
+func (m *arModel) LockUpdate() *arModel {
+	return &arModel{m.M.LockUpdate()}
+}
+
+// LockShared sets the lock in share mode for current operation.
+func (m *arModel) LockShared() *arModel {
+	return &arModel{m.M.LockShared()}
+}
+
+// Unscoped enables/disables the soft deleting feature.
+func (m *arModel) Unscoped() *arModel {
+	return &arModel{m.M.Unscoped()}
+}

+ 2 - 2
app/model/admin/sys_dict_type/sys_dict_type.go

@@ -40,7 +40,7 @@ type SelectPageReq struct {
 }
 
 //添加数据
-func AddSave(req *AddReq, userId int) (int64, error) {
+func AddSave(req *AddReq, userId uint64) (int64, error) {
 	var entity Entity
 	entity.Status = req.Status
 	entity.DictType = req.DictType
@@ -76,7 +76,7 @@ func GetDictById(id int) (dict *Entity, err error) {
 }
 
 //修改保存字典类型
-func EditSave(req *EditReq, userId int) (int64, error) {
+func EditSave(req *EditReq, userId uint64) (int64, error) {
 	entity, err := GetDictById(gconv.Int(req.DictId))
 	if err != nil || entity == nil {
 		return 0, err

+ 5 - 0
app/model/admin/sys_dict_type/sys_dict_type_entity.go

@@ -33,6 +33,11 @@ func (r *Entity) Insert() (result sql.Result, err error) {
 	return Model.Data(r).Insert()
 }
 
+// InsertIgnore does "INSERT IGNORE INTO ..." statement for inserting current object into table.
+func (r *Entity) InsertIgnore() (result sql.Result, err error) {
+	return Model.Data(r).InsertIgnore()
+}
+
 // Replace does "REPLACE...INTO..." statement for inserting current object into table.
 // If there's already another same record in the table (it checks using primary key or unique index),
 // it deletes it and insert this one.

+ 72 - 80
app/model/admin/sys_dict_type/sys_dict_type_model.go

@@ -8,12 +8,13 @@ import (
 	"database/sql"
 	"github.com/gogf/gf/database/gdb"
 	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/frame/gmvc"
 	"time"
 )
 
 // arModel is a active record design model for table sys_dict_type operations.
 type arModel struct {
-	M *gdb.Model
+	gmvc.M
 }
 
 var (
@@ -21,6 +22,28 @@ var (
 	Table = "sys_dict_type"
 	// Model is the model object of sys_dict_type.
 	Model = &arModel{g.DB("default").Table(Table).Safe()}
+	// Columns defines and stores column names for table sys_dict_type.
+	Columns = struct {
+		DictId     string // 字典主键
+		DictName   string // 字典名称
+		DictType   string // 字典类型
+		Status     string // 状态(0正常 1停用)
+		CreateBy   string // 创建者
+		CreateTime string // 创建时间
+		UpdateBy   string // 更新者
+		UpdateTime string // 更新时间
+		Remark     string // 备注
+	}{
+		DictId:     "dict_id",
+		DictName:   "dict_name",
+		DictType:   "dict_type",
+		Status:     "status",
+		CreateBy:   "create_by",
+		CreateTime: "create_time",
+		UpdateBy:   "update_by",
+		UpdateTime: "update_time",
+		Remark:     "remark",
+	}
 )
 
 // FindOne is a convenience method for Model.FindOne.
@@ -41,6 +64,12 @@ func FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
 	return Model.FindValue(fieldsAndWhere...)
 }
 
+// FindArray is a convenience method for Model.FindArray.
+// See Model.FindArray.
+func FindArray(fieldsAndWhere ...interface{}) ([]gdb.Value, error) {
+	return Model.FindArray(fieldsAndWhere...)
+}
+
 // FindCount is a convenience method for Model.FindCount.
 // See Model.FindCount.
 func FindCount(where ...interface{}) (int, error) {
@@ -52,6 +81,11 @@ func Insert(data ...interface{}) (result sql.Result, err error) {
 	return Model.Insert(data...)
 }
 
+// InsertIgnore is a convenience method for Model.InsertIgnore.
+func InsertIgnore(data ...interface{}) (result sql.Result, err error) {
+	return Model.InsertIgnore(data...)
+}
+
 // Replace is a convenience method for Model.Replace.
 func Replace(data ...interface{}) (result sql.Result, err error) {
 	return Model.Replace(data...)
@@ -94,18 +128,30 @@ func (m *arModel) Slave() *arModel {
 }
 
 // LeftJoin does "LEFT JOIN ... ON ..." statement on the model.
-func (m *arModel) LeftJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.LeftJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").LeftJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").LeftJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) LeftJoin(table ...string) *arModel {
+	return &arModel{m.M.LeftJoin(table...)}
 }
 
 // RightJoin does "RIGHT JOIN ... ON ..." statement on the model.
-func (m *arModel) RightJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.RightJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").RightJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").RightJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) RightJoin(table ...string) *arModel {
+	return &arModel{m.M.RightJoin(table...)}
 }
 
 // InnerJoin does "INNER JOIN ... ON ..." statement on the model.
-func (m *arModel) InnerJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.InnerJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").InnerJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").InnerJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) InnerJoin(table ...string) *arModel {
+	return &arModel{m.M.InnerJoin(table...)}
 }
 
 // Fields sets the operation fields of the model, multiple fields joined using char ','.
@@ -165,8 +211,8 @@ func (m *arModel) Group(groupBy string) *arModel {
 }
 
 // Order sets the "ORDER BY" statement for the model.
-func (m *arModel) Order(orderBy string) *arModel {
-	return &arModel{m.M.Order(orderBy)}
+func (m *arModel) Order(orderBy ...string) *arModel {
+	return &arModel{m.M.Order(orderBy...)}
 }
 
 // Limit sets the "LIMIT" statement for the model.
@@ -207,8 +253,8 @@ func (m *arModel) Batch(batch int) *arModel {
 // control the cache like changing the <duration> or clearing the cache with specified <name>.
 //
 // Note that, the cache feature is disabled if the model is operating on a transaction.
-func (m *arModel) Cache(expire time.Duration, name ...string) *arModel {
-	return &arModel{m.M.Cache(expire, name...)}
+func (m *arModel) Cache(duration time.Duration, name ...string) *arModel {
+	return &arModel{m.M.Cache(duration, name...)}
 }
 
 // Data sets the operation data for the model.
@@ -222,53 +268,6 @@ func (m *arModel) Data(data ...interface{}) *arModel {
 	return &arModel{m.M.Data(data...)}
 }
 
-// Insert does "INSERT INTO ..." statement for the model.
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Insert(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Insert(data...)
-}
-
-// Replace does "REPLACE INTO ..." statement for the model.
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Replace(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Replace(data...)
-}
-
-// Save does "INSERT INTO ... ON DUPLICATE KEY UPDATE..." statement for the model.
-// It updates the record if there's primary or unique index in the saving data,
-// or else it inserts a new record into the table.
-//
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Save(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Save(data...)
-}
-
-// Update does "UPDATE ... " statement for the model.
-//
-// If the optional parameter <dataAndWhere> is given, the dataAndWhere[0] is the updated
-// data field, and dataAndWhere[1:] is treated as where condition fields.
-// Also see Model.Data and Model.Where functions.
-func (m *arModel) Update(dataAndWhere ...interface{}) (result sql.Result, err error) {
-	return m.M.Update(dataAndWhere...)
-}
-
-// Delete does "DELETE FROM ... " statement for the model.
-// The optional parameter <where> is the same as the parameter of Model.Where function,
-// see Model.Where.
-func (m *arModel) Delete(where ...interface{}) (result sql.Result, err error) {
-	return m.M.Delete(where...)
-}
-
-// Count does "SELECT COUNT(x) FROM ..." statement for the model.
-// The optional parameter <where> is the same as the parameter of Model.Where function,
-// see Model.Where.
-func (m *arModel) Count(where ...interface{}) (int, error) {
-	return m.M.Count(where...)
-}
-
 // All does "SELECT FROM ..." statement for the model.
 // It retrieves the records from table and returns the result as []*Entity.
 // It returns nil if there's no record retrieved with the given conditions from table.
@@ -304,16 +303,6 @@ func (m *arModel) One(where ...interface{}) (*Entity, error) {
 	return entity, nil
 }
 
-// Value retrieves a specified record value from table and returns the result as interface type.
-// It returns nil if there's no record found with the given conditions from table.
-//
-// If the optional parameter <fieldsAndWhere> is given, the fieldsAndWhere[0] is the selected fields
-// and fieldsAndWhere[1:] is treated as where condition fields.
-// Also see Model.Fields and Model.Where functions.
-func (m *arModel) Value(fieldsAndWhere ...interface{}) (gdb.Value, error) {
-	return m.M.Value(fieldsAndWhere...)
-}
-
 // FindOne retrieves and returns a single Record by Model.WherePri and Model.One.
 // Also see Model.WherePri and Model.One.
 func (m *arModel) FindOne(where ...interface{}) (*Entity, error) {
@@ -342,18 +331,6 @@ func (m *arModel) FindAll(where ...interface{}) ([]*Entity, error) {
 	return entities, nil
 }
 
-// FindValue retrieves and returns single field value by Model.WherePri and Model.Value.
-// Also see Model.WherePri and Model.Value.
-func (m *arModel) FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
-	return m.M.FindValue(fieldsAndWhere...)
-}
-
-// FindCount retrieves and returns the record number by Model.WherePri and Model.Count.
-// Also see Model.WherePri and Model.Count.
-func (m *arModel) FindCount(where ...interface{}) (int, error) {
-	return m.M.FindCount(where...)
-}
-
 // Chunk iterates the table with given size and callback function.
 func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error) bool) {
 	m.M.Chunk(limit, func(result gdb.Result, err error) bool {
@@ -365,3 +342,18 @@ func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error)
 		return callback(entities, err)
 	})
 }
+
+// LockUpdate sets the lock for update for current operation.
+func (m *arModel) LockUpdate() *arModel {
+	return &arModel{m.M.LockUpdate()}
+}
+
+// LockShared sets the lock in share mode for current operation.
+func (m *arModel) LockShared() *arModel {
+	return &arModel{m.M.LockShared()}
+}
+
+// Unscoped enables/disables the soft deleting feature.
+func (m *arModel) Unscoped() *arModel {
+	return &arModel{m.M.Unscoped()}
+}

+ 2 - 2
app/model/admin/sys_job/sys_job.go

@@ -47,7 +47,7 @@ func GetJobs() (jobs []*Entity, err error) {
 }
 
 //添加计划任务
-func Add(req *ReqAdd, userId int) (id int64, err error) {
+func Add(req *ReqAdd, userId uint64) (id int64, err error) {
 	entity := new(Entity)
 	entity.JobName = req.JobName
 	entity.JobGroup = req.JobGroup
@@ -90,7 +90,7 @@ func GetJobInfoById(id int64) (job *Entity, err error) {
 }
 
 //修改计划任务
-func Edit(req *ReqEdit, userId int) (rows int64, err error) {
+func Edit(req *ReqEdit, userId uint64) (rows int64, err error) {
 	entity, err := GetJobInfoById(req.JobId)
 	if err != nil {
 		return

+ 5 - 0
app/model/admin/sys_job/sys_job_entity.go

@@ -38,6 +38,11 @@ func (r *Entity) Insert() (result sql.Result, err error) {
 	return Model.Data(r).Insert()
 }
 
+// InsertIgnore does "INSERT IGNORE INTO ..." statement for inserting current object into table.
+func (r *Entity) InsertIgnore() (result sql.Result, err error) {
+	return Model.Data(r).InsertIgnore()
+}
+
 // Replace does "REPLACE...INTO..." statement for inserting current object into table.
 // If there's already another same record in the table (it checks using primary key or unique index),
 // it deletes it and insert this one.

+ 82 - 80
app/model/admin/sys_job/sys_job_model.go

@@ -8,12 +8,13 @@ import (
 	"database/sql"
 	"github.com/gogf/gf/database/gdb"
 	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/frame/gmvc"
 	"time"
 )
 
 // arModel is a active record design model for table sys_job operations.
 type arModel struct {
-	M *gdb.Model
+	gmvc.M
 }
 
 var (
@@ -21,6 +22,38 @@ var (
 	Table = "sys_job"
 	// Model is the model object of sys_job.
 	Model = &arModel{g.DB("default").Table(Table).Safe()}
+	// Columns defines and stores column names for table sys_job.
+	Columns = struct {
+		JobId          string // 任务ID
+		JobName        string // 任务名称
+		JobParams      string // 参数
+		JobGroup       string // 任务组名
+		InvokeTarget   string // 调用目标字符串
+		CronExpression string // cron执行表达式
+		MisfirePolicy  string // 计划执行策略(1多次执行 2执行一次)
+		Concurrent     string // 是否并发执行(0允许 1禁止)
+		Status         string // 状态(0正常 1暂停)
+		CreateBy       string // 创建者
+		CreateTime     string // 创建时间
+		UpdateBy       string // 更新者
+		UpdateTime     string // 更新时间
+		Remark         string // 备注信息
+	}{
+		JobId:          "job_id",
+		JobName:        "job_name",
+		JobParams:      "job_params",
+		JobGroup:       "job_group",
+		InvokeTarget:   "invoke_target",
+		CronExpression: "cron_expression",
+		MisfirePolicy:  "misfire_policy",
+		Concurrent:     "concurrent",
+		Status:         "status",
+		CreateBy:       "create_by",
+		CreateTime:     "create_time",
+		UpdateBy:       "update_by",
+		UpdateTime:     "update_time",
+		Remark:         "remark",
+	}
 )
 
 // FindOne is a convenience method for Model.FindOne.
@@ -41,6 +74,12 @@ func FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
 	return Model.FindValue(fieldsAndWhere...)
 }
 
+// FindArray is a convenience method for Model.FindArray.
+// See Model.FindArray.
+func FindArray(fieldsAndWhere ...interface{}) ([]gdb.Value, error) {
+	return Model.FindArray(fieldsAndWhere...)
+}
+
 // FindCount is a convenience method for Model.FindCount.
 // See Model.FindCount.
 func FindCount(where ...interface{}) (int, error) {
@@ -52,6 +91,11 @@ func Insert(data ...interface{}) (result sql.Result, err error) {
 	return Model.Insert(data...)
 }
 
+// InsertIgnore is a convenience method for Model.InsertIgnore.
+func InsertIgnore(data ...interface{}) (result sql.Result, err error) {
+	return Model.InsertIgnore(data...)
+}
+
 // Replace is a convenience method for Model.Replace.
 func Replace(data ...interface{}) (result sql.Result, err error) {
 	return Model.Replace(data...)
@@ -94,18 +138,30 @@ func (m *arModel) Slave() *arModel {
 }
 
 // LeftJoin does "LEFT JOIN ... ON ..." statement on the model.
-func (m *arModel) LeftJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.LeftJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").LeftJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").LeftJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) LeftJoin(table ...string) *arModel {
+	return &arModel{m.M.LeftJoin(table...)}
 }
 
 // RightJoin does "RIGHT JOIN ... ON ..." statement on the model.
-func (m *arModel) RightJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.RightJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").RightJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").RightJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) RightJoin(table ...string) *arModel {
+	return &arModel{m.M.RightJoin(table...)}
 }
 
 // InnerJoin does "INNER JOIN ... ON ..." statement on the model.
-func (m *arModel) InnerJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.InnerJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").InnerJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").InnerJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) InnerJoin(table ...string) *arModel {
+	return &arModel{m.M.InnerJoin(table...)}
 }
 
 // Fields sets the operation fields of the model, multiple fields joined using char ','.
@@ -165,8 +221,8 @@ func (m *arModel) Group(groupBy string) *arModel {
 }
 
 // Order sets the "ORDER BY" statement for the model.
-func (m *arModel) Order(orderBy string) *arModel {
-	return &arModel{m.M.Order(orderBy)}
+func (m *arModel) Order(orderBy ...string) *arModel {
+	return &arModel{m.M.Order(orderBy...)}
 }
 
 // Limit sets the "LIMIT" statement for the model.
@@ -207,8 +263,8 @@ func (m *arModel) Batch(batch int) *arModel {
 // control the cache like changing the <duration> or clearing the cache with specified <name>.
 //
 // Note that, the cache feature is disabled if the model is operating on a transaction.
-func (m *arModel) Cache(expire time.Duration, name ...string) *arModel {
-	return &arModel{m.M.Cache(expire, name...)}
+func (m *arModel) Cache(duration time.Duration, name ...string) *arModel {
+	return &arModel{m.M.Cache(duration, name...)}
 }
 
 // Data sets the operation data for the model.
@@ -222,53 +278,6 @@ func (m *arModel) Data(data ...interface{}) *arModel {
 	return &arModel{m.M.Data(data...)}
 }
 
-// Insert does "INSERT INTO ..." statement for the model.
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Insert(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Insert(data...)
-}
-
-// Replace does "REPLACE INTO ..." statement for the model.
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Replace(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Replace(data...)
-}
-
-// Save does "INSERT INTO ... ON DUPLICATE KEY UPDATE..." statement for the model.
-// It updates the record if there's primary or unique index in the saving data,
-// or else it inserts a new record into the table.
-//
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Save(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Save(data...)
-}
-
-// Update does "UPDATE ... " statement for the model.
-//
-// If the optional parameter <dataAndWhere> is given, the dataAndWhere[0] is the updated
-// data field, and dataAndWhere[1:] is treated as where condition fields.
-// Also see Model.Data and Model.Where functions.
-func (m *arModel) Update(dataAndWhere ...interface{}) (result sql.Result, err error) {
-	return m.M.Update(dataAndWhere...)
-}
-
-// Delete does "DELETE FROM ... " statement for the model.
-// The optional parameter <where> is the same as the parameter of Model.Where function,
-// see Model.Where.
-func (m *arModel) Delete(where ...interface{}) (result sql.Result, err error) {
-	return m.M.Delete(where...)
-}
-
-// Count does "SELECT COUNT(x) FROM ..." statement for the model.
-// The optional parameter <where> is the same as the parameter of Model.Where function,
-// see Model.Where.
-func (m *arModel) Count(where ...interface{}) (int, error) {
-	return m.M.Count(where...)
-}
-
 // All does "SELECT FROM ..." statement for the model.
 // It retrieves the records from table and returns the result as []*Entity.
 // It returns nil if there's no record retrieved with the given conditions from table.
@@ -304,16 +313,6 @@ func (m *arModel) One(where ...interface{}) (*Entity, error) {
 	return entity, nil
 }
 
-// Value retrieves a specified record value from table and returns the result as interface type.
-// It returns nil if there's no record found with the given conditions from table.
-//
-// If the optional parameter <fieldsAndWhere> is given, the fieldsAndWhere[0] is the selected fields
-// and fieldsAndWhere[1:] is treated as where condition fields.
-// Also see Model.Fields and Model.Where functions.
-func (m *arModel) Value(fieldsAndWhere ...interface{}) (gdb.Value, error) {
-	return m.M.Value(fieldsAndWhere...)
-}
-
 // FindOne retrieves and returns a single Record by Model.WherePri and Model.One.
 // Also see Model.WherePri and Model.One.
 func (m *arModel) FindOne(where ...interface{}) (*Entity, error) {
@@ -342,18 +341,6 @@ func (m *arModel) FindAll(where ...interface{}) ([]*Entity, error) {
 	return entities, nil
 }
 
-// FindValue retrieves and returns single field value by Model.WherePri and Model.Value.
-// Also see Model.WherePri and Model.Value.
-func (m *arModel) FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
-	return m.M.FindValue(fieldsAndWhere...)
-}
-
-// FindCount retrieves and returns the record number by Model.WherePri and Model.Count.
-// Also see Model.WherePri and Model.Count.
-func (m *arModel) FindCount(where ...interface{}) (int, error) {
-	return m.M.FindCount(where...)
-}
-
 // Chunk iterates the table with given size and callback function.
 func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error) bool) {
 	m.M.Chunk(limit, func(result gdb.Result, err error) bool {
@@ -365,3 +352,18 @@ func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error)
 		return callback(entities, err)
 	})
 }
+
+// LockUpdate sets the lock for update for current operation.
+func (m *arModel) LockUpdate() *arModel {
+	return &arModel{m.M.LockUpdate()}
+}
+
+// LockShared sets the lock in share mode for current operation.
+func (m *arModel) LockShared() *arModel {
+	return &arModel{m.M.LockShared()}
+}
+
+// Unscoped enables/disables the soft deleting feature.
+func (m *arModel) Unscoped() *arModel {
+	return &arModel{m.M.Unscoped()}
+}

+ 6 - 1
app/model/admin/sys_login_log/sys_login_log_entity.go

@@ -20,7 +20,7 @@ type Entity struct {
 	Status        int    `orm:"status"          json:"status"`         // 登录状态(0成功 1失败)
 	Msg           string `orm:"msg"             json:"msg"`            // 提示消息
 	LoginTime     int64  `orm:"login_time"      json:"login_time"`     // 访问时间
-	Module        string `orm:"module"  json:"module"`                 //登录模块
+	Module        string `orm:"module"          json:"module"`         // 登录模块
 }
 
 // OmitEmpty sets OPTION_OMITEMPTY option for the model, which automatically filers
@@ -34,6 +34,11 @@ func (r *Entity) Insert() (result sql.Result, err error) {
 	return Model.Data(r).Insert()
 }
 
+// InsertIgnore does "INSERT IGNORE INTO ..." statement for inserting current object into table.
+func (r *Entity) InsertIgnore() (result sql.Result, err error) {
+	return Model.Data(r).InsertIgnore()
+}
+
 // Replace does "REPLACE...INTO..." statement for inserting current object into table.
 // If there's already another same record in the table (it checks using primary key or unique index),
 // it deletes it and insert this one.

+ 74 - 80
app/model/admin/sys_login_log/sys_login_log_model.go

@@ -8,12 +8,13 @@ import (
 	"database/sql"
 	"github.com/gogf/gf/database/gdb"
 	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/frame/gmvc"
 	"time"
 )
 
 // arModel is a active record design model for table sys_login_log operations.
 type arModel struct {
-	M *gdb.Model
+	gmvc.M
 }
 
 var (
@@ -21,6 +22,30 @@ var (
 	Table = "sys_login_log"
 	// Model is the model object of sys_login_log.
 	Model = &arModel{g.DB("default").Table(Table).Safe()}
+	// Columns defines and stores column names for table sys_login_log.
+	Columns = struct {
+		InfoId        string // 访问ID
+		LoginName     string // 登录账号
+		Ipaddr        string // 登录IP地址
+		LoginLocation string // 登录地点
+		Browser       string // 浏览器类型
+		Os            string // 操作系统
+		Status        string // 登录状态(0成功 1失败)
+		Msg           string // 提示消息
+		LoginTime     string // 访问时间
+		Module        string // 登录模块
+	}{
+		InfoId:        "info_id",
+		LoginName:     "login_name",
+		Ipaddr:        "ipaddr",
+		LoginLocation: "login_location",
+		Browser:       "browser",
+		Os:            "os",
+		Status:        "status",
+		Msg:           "msg",
+		LoginTime:     "login_time",
+		Module:        "module",
+	}
 )
 
 // FindOne is a convenience method for Model.FindOne.
@@ -41,6 +66,12 @@ func FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
 	return Model.FindValue(fieldsAndWhere...)
 }
 
+// FindArray is a convenience method for Model.FindArray.
+// See Model.FindArray.
+func FindArray(fieldsAndWhere ...interface{}) ([]gdb.Value, error) {
+	return Model.FindArray(fieldsAndWhere...)
+}
+
 // FindCount is a convenience method for Model.FindCount.
 // See Model.FindCount.
 func FindCount(where ...interface{}) (int, error) {
@@ -52,6 +83,11 @@ func Insert(data ...interface{}) (result sql.Result, err error) {
 	return Model.Insert(data...)
 }
 
+// InsertIgnore is a convenience method for Model.InsertIgnore.
+func InsertIgnore(data ...interface{}) (result sql.Result, err error) {
+	return Model.InsertIgnore(data...)
+}
+
 // Replace is a convenience method for Model.Replace.
 func Replace(data ...interface{}) (result sql.Result, err error) {
 	return Model.Replace(data...)
@@ -94,18 +130,30 @@ func (m *arModel) Slave() *arModel {
 }
 
 // LeftJoin does "LEFT JOIN ... ON ..." statement on the model.
-func (m *arModel) LeftJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.LeftJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").LeftJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").LeftJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) LeftJoin(table ...string) *arModel {
+	return &arModel{m.M.LeftJoin(table...)}
 }
 
 // RightJoin does "RIGHT JOIN ... ON ..." statement on the model.
-func (m *arModel) RightJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.RightJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").RightJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").RightJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) RightJoin(table ...string) *arModel {
+	return &arModel{m.M.RightJoin(table...)}
 }
 
 // InnerJoin does "INNER JOIN ... ON ..." statement on the model.
-func (m *arModel) InnerJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.InnerJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").InnerJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").InnerJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) InnerJoin(table ...string) *arModel {
+	return &arModel{m.M.InnerJoin(table...)}
 }
 
 // Fields sets the operation fields of the model, multiple fields joined using char ','.
@@ -165,8 +213,8 @@ func (m *arModel) Group(groupBy string) *arModel {
 }
 
 // Order sets the "ORDER BY" statement for the model.
-func (m *arModel) Order(orderBy string) *arModel {
-	return &arModel{m.M.Order(orderBy)}
+func (m *arModel) Order(orderBy ...string) *arModel {
+	return &arModel{m.M.Order(orderBy...)}
 }
 
 // Limit sets the "LIMIT" statement for the model.
@@ -207,8 +255,8 @@ func (m *arModel) Batch(batch int) *arModel {
 // control the cache like changing the <duration> or clearing the cache with specified <name>.
 //
 // Note that, the cache feature is disabled if the model is operating on a transaction.
-func (m *arModel) Cache(expire time.Duration, name ...string) *arModel {
-	return &arModel{m.M.Cache(expire, name...)}
+func (m *arModel) Cache(duration time.Duration, name ...string) *arModel {
+	return &arModel{m.M.Cache(duration, name...)}
 }
 
 // Data sets the operation data for the model.
@@ -222,53 +270,6 @@ func (m *arModel) Data(data ...interface{}) *arModel {
 	return &arModel{m.M.Data(data...)}
 }
 
-// Insert does "INSERT INTO ..." statement for the model.
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Insert(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Insert(data...)
-}
-
-// Replace does "REPLACE INTO ..." statement for the model.
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Replace(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Replace(data...)
-}
-
-// Save does "INSERT INTO ... ON DUPLICATE KEY UPDATE..." statement for the model.
-// It updates the record if there's primary or unique index in the saving data,
-// or else it inserts a new record into the table.
-//
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Save(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Save(data...)
-}
-
-// Update does "UPDATE ... " statement for the model.
-//
-// If the optional parameter <dataAndWhere> is given, the dataAndWhere[0] is the updated
-// data field, and dataAndWhere[1:] is treated as where condition fields.
-// Also see Model.Data and Model.Where functions.
-func (m *arModel) Update(dataAndWhere ...interface{}) (result sql.Result, err error) {
-	return m.M.Update(dataAndWhere...)
-}
-
-// Delete does "DELETE FROM ... " statement for the model.
-// The optional parameter <where> is the same as the parameter of Model.Where function,
-// see Model.Where.
-func (m *arModel) Delete(where ...interface{}) (result sql.Result, err error) {
-	return m.M.Delete(where...)
-}
-
-// Count does "SELECT COUNT(x) FROM ..." statement for the model.
-// The optional parameter <where> is the same as the parameter of Model.Where function,
-// see Model.Where.
-func (m *arModel) Count(where ...interface{}) (int, error) {
-	return m.M.Count(where...)
-}
-
 // All does "SELECT FROM ..." statement for the model.
 // It retrieves the records from table and returns the result as []*Entity.
 // It returns nil if there's no record retrieved with the given conditions from table.
@@ -304,16 +305,6 @@ func (m *arModel) One(where ...interface{}) (*Entity, error) {
 	return entity, nil
 }
 
-// Value retrieves a specified record value from table and returns the result as interface type.
-// It returns nil if there's no record found with the given conditions from table.
-//
-// If the optional parameter <fieldsAndWhere> is given, the fieldsAndWhere[0] is the selected fields
-// and fieldsAndWhere[1:] is treated as where condition fields.
-// Also see Model.Fields and Model.Where functions.
-func (m *arModel) Value(fieldsAndWhere ...interface{}) (gdb.Value, error) {
-	return m.M.Value(fieldsAndWhere...)
-}
-
 // FindOne retrieves and returns a single Record by Model.WherePri and Model.One.
 // Also see Model.WherePri and Model.One.
 func (m *arModel) FindOne(where ...interface{}) (*Entity, error) {
@@ -342,18 +333,6 @@ func (m *arModel) FindAll(where ...interface{}) ([]*Entity, error) {
 	return entities, nil
 }
 
-// FindValue retrieves and returns single field value by Model.WherePri and Model.Value.
-// Also see Model.WherePri and Model.Value.
-func (m *arModel) FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
-	return m.M.FindValue(fieldsAndWhere...)
-}
-
-// FindCount retrieves and returns the record number by Model.WherePri and Model.Count.
-// Also see Model.WherePri and Model.Count.
-func (m *arModel) FindCount(where ...interface{}) (int, error) {
-	return m.M.FindCount(where...)
-}
-
 // Chunk iterates the table with given size and callback function.
 func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error) bool) {
 	m.M.Chunk(limit, func(result gdb.Result, err error) bool {
@@ -365,3 +344,18 @@ func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error)
 		return callback(entities, err)
 	})
 }
+
+// LockUpdate sets the lock for update for current operation.
+func (m *arModel) LockUpdate() *arModel {
+	return &arModel{m.M.LockUpdate()}
+}
+
+// LockShared sets the lock in share mode for current operation.
+func (m *arModel) LockShared() *arModel {
+	return &arModel{m.M.LockShared()}
+}
+
+// Unscoped enables/disables the soft deleting feature.
+func (m *arModel) Unscoped() *arModel {
+	return &arModel{m.M.Unscoped()}
+}

+ 5 - 0
app/model/admin/sys_oper_log/sys_oper_log_entity.go

@@ -40,6 +40,11 @@ func (r *Entity) Insert() (result sql.Result, err error) {
 	return Model.Data(r).Insert()
 }
 
+// InsertIgnore does "INSERT IGNORE INTO ..." statement for inserting current object into table.
+func (r *Entity) InsertIgnore() (result sql.Result, err error) {
+	return Model.Data(r).InsertIgnore()
+}
+
 // Replace does "REPLACE...INTO..." statement for inserting current object into table.
 // If there's already another same record in the table (it checks using primary key or unique index),
 // it deletes it and insert this one.

+ 86 - 80
app/model/admin/sys_oper_log/sys_oper_log_model.go

@@ -8,12 +8,13 @@ import (
 	"database/sql"
 	"github.com/gogf/gf/database/gdb"
 	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/frame/gmvc"
 	"time"
 )
 
 // arModel is a active record design model for table sys_oper_log operations.
 type arModel struct {
-	M *gdb.Model
+	gmvc.M
 }
 
 var (
@@ -21,6 +22,42 @@ var (
 	Table = "sys_oper_log"
 	// Model is the model object of sys_oper_log.
 	Model = &arModel{g.DB("default").Table(Table).Safe()}
+	// Columns defines and stores column names for table sys_oper_log.
+	Columns = struct {
+		OperId        string // 日志主键
+		Title         string // 模块标题
+		BusinessType  string // 业务类型(0其它 1新增 2修改 3删除)
+		Method        string // 方法名称
+		RequestMethod string // 请求方式
+		OperatorType  string // 操作类别(0其它 1后台用户 2手机端用户)
+		OperName      string // 操作人员
+		DeptName      string // 部门名称
+		OperUrl       string // 请求URL
+		OperIp        string // 主机地址
+		OperLocation  string // 操作地点
+		OperParam     string // 请求参数
+		JsonResult    string // 返回参数
+		Status        string // 操作状态(0正常 1异常)
+		ErrorMsg      string // 错误消息
+		OperTime      string // 操作时间
+	}{
+		OperId:        "oper_id",
+		Title:         "title",
+		BusinessType:  "business_type",
+		Method:        "method",
+		RequestMethod: "request_method",
+		OperatorType:  "operator_type",
+		OperName:      "oper_name",
+		DeptName:      "dept_name",
+		OperUrl:       "oper_url",
+		OperIp:        "oper_ip",
+		OperLocation:  "oper_location",
+		OperParam:     "oper_param",
+		JsonResult:    "json_result",
+		Status:        "status",
+		ErrorMsg:      "error_msg",
+		OperTime:      "oper_time",
+	}
 )
 
 // FindOne is a convenience method for Model.FindOne.
@@ -41,6 +78,12 @@ func FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
 	return Model.FindValue(fieldsAndWhere...)
 }
 
+// FindArray is a convenience method for Model.FindArray.
+// See Model.FindArray.
+func FindArray(fieldsAndWhere ...interface{}) ([]gdb.Value, error) {
+	return Model.FindArray(fieldsAndWhere...)
+}
+
 // FindCount is a convenience method for Model.FindCount.
 // See Model.FindCount.
 func FindCount(where ...interface{}) (int, error) {
@@ -52,6 +95,11 @@ func Insert(data ...interface{}) (result sql.Result, err error) {
 	return Model.Insert(data...)
 }
 
+// InsertIgnore is a convenience method for Model.InsertIgnore.
+func InsertIgnore(data ...interface{}) (result sql.Result, err error) {
+	return Model.InsertIgnore(data...)
+}
+
 // Replace is a convenience method for Model.Replace.
 func Replace(data ...interface{}) (result sql.Result, err error) {
 	return Model.Replace(data...)
@@ -94,18 +142,30 @@ func (m *arModel) Slave() *arModel {
 }
 
 // LeftJoin does "LEFT JOIN ... ON ..." statement on the model.
-func (m *arModel) LeftJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.LeftJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").LeftJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").LeftJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) LeftJoin(table ...string) *arModel {
+	return &arModel{m.M.LeftJoin(table...)}
 }
 
 // RightJoin does "RIGHT JOIN ... ON ..." statement on the model.
-func (m *arModel) RightJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.RightJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").RightJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").RightJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) RightJoin(table ...string) *arModel {
+	return &arModel{m.M.RightJoin(table...)}
 }
 
 // InnerJoin does "INNER JOIN ... ON ..." statement on the model.
-func (m *arModel) InnerJoin(joinTable string, on string) *arModel {
-	return &arModel{m.M.InnerJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").InnerJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").InnerJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) InnerJoin(table ...string) *arModel {
+	return &arModel{m.M.InnerJoin(table...)}
 }
 
 // Fields sets the operation fields of the model, multiple fields joined using char ','.
@@ -165,8 +225,8 @@ func (m *arModel) Group(groupBy string) *arModel {
 }
 
 // Order sets the "ORDER BY" statement for the model.
-func (m *arModel) Order(orderBy string) *arModel {
-	return &arModel{m.M.Order(orderBy)}
+func (m *arModel) Order(orderBy ...string) *arModel {
+	return &arModel{m.M.Order(orderBy...)}
 }
 
 // Limit sets the "LIMIT" statement for the model.
@@ -207,8 +267,8 @@ func (m *arModel) Batch(batch int) *arModel {
 // control the cache like changing the <duration> or clearing the cache with specified <name>.
 //
 // Note that, the cache feature is disabled if the model is operating on a transaction.
-func (m *arModel) Cache(expire time.Duration, name ...string) *arModel {
-	return &arModel{m.M.Cache(expire, name...)}
+func (m *arModel) Cache(duration time.Duration, name ...string) *arModel {
+	return &arModel{m.M.Cache(duration, name...)}
 }
 
 // Data sets the operation data for the model.
@@ -222,53 +282,6 @@ func (m *arModel) Data(data ...interface{}) *arModel {
 	return &arModel{m.M.Data(data...)}
 }
 
-// Insert does "INSERT INTO ..." statement for the model.
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Insert(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Insert(data...)
-}
-
-// Replace does "REPLACE INTO ..." statement for the model.
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Replace(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Replace(data...)
-}
-
-// Save does "INSERT INTO ... ON DUPLICATE KEY UPDATE..." statement for the model.
-// It updates the record if there's primary or unique index in the saving data,
-// or else it inserts a new record into the table.
-//
-// The optional parameter <data> is the same as the parameter of Model.Data function,
-// see Model.Data.
-func (m *arModel) Save(data ...interface{}) (result sql.Result, err error) {
-	return m.M.Save(data...)
-}
-
-// Update does "UPDATE ... " statement for the model.
-//
-// If the optional parameter <dataAndWhere> is given, the dataAndWhere[0] is the updated
-// data field, and dataAndWhere[1:] is treated as where condition fields.
-// Also see Model.Data and Model.Where functions.
-func (m *arModel) Update(dataAndWhere ...interface{}) (result sql.Result, err error) {
-	return m.M.Update(dataAndWhere...)
-}
-
-// Delete does "DELETE FROM ... " statement for the model.
-// The optional parameter <where> is the same as the parameter of Model.Where function,
-// see Model.Where.
-func (m *arModel) Delete(where ...interface{}) (result sql.Result, err error) {
-	return m.M.Delete(where...)
-}
-
-// Count does "SELECT COUNT(x) FROM ..." statement for the model.
-// The optional parameter <where> is the same as the parameter of Model.Where function,
-// see Model.Where.
-func (m *arModel) Count(where ...interface{}) (int, error) {
-	return m.M.Count(where...)
-}
-
 // All does "SELECT FROM ..." statement for the model.
 // It retrieves the records from table and returns the result as []*Entity.
 // It returns nil if there's no record retrieved with the given conditions from table.
@@ -304,16 +317,6 @@ func (m *arModel) One(where ...interface{}) (*Entity, error) {
 	return entity, nil
 }
 
-// Value retrieves a specified record value from table and returns the result as interface type.
-// It returns nil if there's no record found with the given conditions from table.
-//
-// If the optional parameter <fieldsAndWhere> is given, the fieldsAndWhere[0] is the selected fields
-// and fieldsAndWhere[1:] is treated as where condition fields.
-// Also see Model.Fields and Model.Where functions.
-func (m *arModel) Value(fieldsAndWhere ...interface{}) (gdb.Value, error) {
-	return m.M.Value(fieldsAndWhere...)
-}
-
 // FindOne retrieves and returns a single Record by Model.WherePri and Model.One.
 // Also see Model.WherePri and Model.One.
 func (m *arModel) FindOne(where ...interface{}) (*Entity, error) {
@@ -342,18 +345,6 @@ func (m *arModel) FindAll(where ...interface{}) ([]*Entity, error) {
 	return entities, nil
 }
 
-// FindValue retrieves and returns single field value by Model.WherePri and Model.Value.
-// Also see Model.WherePri and Model.Value.
-func (m *arModel) FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
-	return m.M.FindValue(fieldsAndWhere...)
-}
-
-// FindCount retrieves and returns the record number by Model.WherePri and Model.Count.
-// Also see Model.WherePri and Model.Count.
-func (m *arModel) FindCount(where ...interface{}) (int, error) {
-	return m.M.FindCount(where...)
-}
-
 // Chunk iterates the table with given size and callback function.
 func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error) bool) {
 	m.M.Chunk(limit, func(result gdb.Result, err error) bool {
@@ -365,3 +356,18 @@ func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error)
 		return callback(entities, err)
 	})
 }
+
+// LockUpdate sets the lock for update for current operation.
+func (m *arModel) LockUpdate() *arModel {
+	return &arModel{m.M.LockUpdate()}
+}
+
+// LockShared sets the lock in share mode for current operation.
+func (m *arModel) LockShared() *arModel {
+	return &arModel{m.M.LockShared()}
+}
+
+// Unscoped enables/disables the soft deleting feature.
+func (m *arModel) Unscoped() *arModel {
+	return &arModel{m.M.Unscoped()}
+}

+ 2 - 2
app/model/admin/sys_post/sys_post.go

@@ -39,13 +39,13 @@ type AddParams struct {
 	PostSort int    `p:"postSort" v:"required#岗位排序不能为空"`
 	Status   string `p:"status" v:"required#状态不能为空"`
 	Remark   string `p:"remark"`
-	AddUser  int
+	AddUser  uint64
 }
 
 type EditParams struct {
 	PostId int64 `p:"postId" v:"required#id必须"`
 	AddParams
-	UpUser int
+	UpUser uint64
 }
 
 func List(req *SearchParams) (total, page int, list gdb.Result, err error) {

+ 6 - 6
app/model/admin/user/user.go

@@ -10,8 +10,8 @@ import (
 
 //设置用户状态参数
 type StatusReq struct {
-	Id         int `p:"userId" v:"required#用户id不能为空"`
-	UserStatus int `p:"status" v:"required#用户状态不能为空"`
+	Id         int  `p:"userId" v:"required#用户id不能为空"`
+	UserStatus uint `p:"status" v:"required#用户状态不能为空"`
 }
 
 //重置用户密码状态参数
@@ -35,7 +35,7 @@ type SearchReq struct {
 
 //添加修改用户公用请求字段
 type SetUserReq struct {
-	DeptId      int64   `p:"deptId" v:"required#用户部门不能为空"` //所属部门
+	DeptId      uint64  `p:"deptId" v:"required#用户部门不能为空"` //所属部门
 	Email       string  `p:"email" v:"email#邮箱格式错误"`       //邮箱
 	NickName    string  `p:"nickName" v:"required#用户昵称不能为空"`
 	Phonenumber string  `p:"phonenumber" v:"required|phone#手机号不能为空|手机号格式错误"`
@@ -43,7 +43,7 @@ type SetUserReq struct {
 	Remark      string  `p:"remark"`
 	RoleIds     []int64 `p:"roleIds"`
 	Sex         int     `p:"sex"`
-	Status      int     `p:"status"`
+	Status      uint    `p:"status"`
 	IsAdmin     int     `p:"is_admin"` // 是否后台管理员 1 是  0   否
 }
 
@@ -60,7 +60,7 @@ type EditUserReq struct {
 	UserId int `p:"userId" v:"required#用户id不能为空"`
 }
 
-func GetUserById(id int) (*Entity, error) {
+func GetUserById(id uint64) (*Entity, error) {
 	return Model.Where("id", id).One()
 }
 
@@ -160,7 +160,7 @@ func GetAdminList(req *SearchReq) (total, page int, userList []*Entity, err erro
 		req.PageNum = 1
 	}
 	page = req.PageNum
-	userList, err = userModel.ForPage(page, req.PageSize).OrderBy("id asc").All()
+	userList, err = userModel.Page(page, req.PageSize).Order("id asc").All()
 	return
 }
 

+ 8 - 6
app/model/admin/user/user_entity.go

@@ -11,27 +11,24 @@ import (
 
 // Entity is the golang structure for table user.
 type Entity struct {
-	Id            int    `orm:"id,primary"       json:"id"`              //
+	Id            uint64 `orm:"id,primary"       json:"id"`              //
 	UserName      string `orm:"user_name,unique" json:"user_name"`       // 用户名
 	Mobile        string `orm:"mobile,unique"    json:"mobile"`          // 中国手机不带国家代码,国际手机号格式为:国家代码-手机号
 	UserNickname  string `orm:"user_nickname"    json:"user_nickname"`   // 用户昵称
 	Birthday      int    `orm:"birthday"         json:"birthday"`        // 生日
 	CreateTime    int    `orm:"create_time"      json:"create_time"`     // 注册时间
 	UserPassword  string `orm:"user_password"    json:"user_password"`   // 登录密码;cmf_password加密
-	UserStatus    int    `orm:"user_status"      json:"user_status"`     // 用户状态;0:禁用,1:正常,2:未验证
+	UserStatus    uint   `orm:"user_status"      json:"user_status"`     // 用户状态;0:禁用,1:正常,2:未验证
 	UserEmail     string `orm:"user_email"       json:"user_email"`      // 用户登录邮箱
 	Sex           int    `orm:"sex"              json:"sex"`             // 性别;0:保密,1:男,2:女
 	Avatar        string `orm:"avatar"           json:"avatar"`          // 用户头像
 	LastLoginTime int    `orm:"last_login_time"  json:"last_login_time"` // 最后登录时间
 	LastLoginIp   string `orm:"last_login_ip"    json:"last_login_ip"`   // 最后登录ip
-	DeptId        int64  `orm:"dept_id"       json:"dept_id"`            //所属部门id
+	DeptId        uint64 `orm:"dept_id"          json:"dept_id"`         // 部门id
 	Remark        string `orm:"remark"           json:"remark"`          // 备注
 	IsAdmin       int    `orm:"is_admin"         json:"is_admin"`        // 是否后台管理员 1 是  0   否
 }
 
-// User is alias of Entity, which some developers say they just want.
-type User = Entity
-
 // OmitEmpty sets OPTION_OMITEMPTY option for the model, which automatically filers
 // the data and where attributes for empty values.
 func (r *Entity) OmitEmpty() *arModel {
@@ -43,6 +40,11 @@ func (r *Entity) Insert() (result sql.Result, err error) {
 	return Model.Data(r).Insert()
 }
 
+// InsertIgnore does "INSERT IGNORE INTO ..." statement for inserting current object into table.
+func (r *Entity) InsertIgnore() (result sql.Result, err error) {
+	return Model.Data(r).InsertIgnore()
+}
+
 // Replace does "REPLACE...INTO..." statement for inserting current object into table.
 // If there's already another same record in the table (it checks using primary key or unique index),
 // it deletes it and insert this one.

+ 199 - 74
app/model/admin/user/user_model.go

@@ -8,12 +8,13 @@ import (
 	"database/sql"
 	"github.com/gogf/gf/database/gdb"
 	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/frame/gmvc"
 	"time"
 )
 
 // arModel is a active record design model for table user operations.
 type arModel struct {
-	Model *gdb.Model
+	gmvc.M
 }
 
 var (
@@ -21,63 +22,176 @@ var (
 	Table = "user"
 	// Model is the model object of user.
 	Model = &arModel{g.DB("default").Table(Table).Safe()}
+	// Columns defines and stores column names for table user.
+	Columns = struct {
+		Id            string //
+		UserName      string // 用户名
+		Mobile        string // 中国手机不带国家代码,国际手机号格式为:国家代码-手机号
+		UserNickname  string // 用户昵称
+		Birthday      string // 生日
+		CreateTime    string // 注册时间
+		UserPassword  string // 登录密码;cmf_password加密
+		UserStatus    string // 用户状态;0:禁用,1:正常,2:未验证
+		UserEmail     string // 用户登录邮箱
+		Sex           string // 性别;0:保密,1:男,2:女
+		Avatar        string // 用户头像
+		LastLoginTime string // 最后登录时间
+		LastLoginIp   string // 最后登录ip
+		DeptId        string // 部门id
+		Remark        string // 备注
+		IsAdmin       string // 是否后台管理员 1 是  0   否
+	}{
+		Id:            "id",
+		UserName:      "user_name",
+		Mobile:        "mobile",
+		UserNickname:  "user_nickname",
+		Birthday:      "birthday",
+		CreateTime:    "create_time",
+		UserPassword:  "user_password",
+		UserStatus:    "user_status",
+		UserEmail:     "user_email",
+		Sex:           "sex",
+		Avatar:        "avatar",
+		LastLoginTime: "last_login_time",
+		LastLoginIp:   "last_login_ip",
+		DeptId:        "dept_id",
+		Remark:        "remark",
+		IsAdmin:       "is_admin",
+	}
 )
 
+// FindOne is a convenience method for Model.FindOne.
+// See Model.FindOne.
+func FindOne(where ...interface{}) (*Entity, error) {
+	return Model.FindOne(where...)
+}
+
+// FindAll is a convenience method for Model.FindAll.
+// See Model.FindAll.
+func FindAll(where ...interface{}) ([]*Entity, error) {
+	return Model.FindAll(where...)
+}
+
+// FindValue is a convenience method for Model.FindValue.
+// See Model.FindValue.
+func FindValue(fieldsAndWhere ...interface{}) (gdb.Value, error) {
+	return Model.FindValue(fieldsAndWhere...)
+}
+
+// FindArray is a convenience method for Model.FindArray.
+// See Model.FindArray.
+func FindArray(fieldsAndWhere ...interface{}) ([]gdb.Value, error) {
+	return Model.FindArray(fieldsAndWhere...)
+}
+
+// FindCount is a convenience method for Model.FindCount.
+// See Model.FindCount.
+func FindCount(where ...interface{}) (int, error) {
+	return Model.FindCount(where...)
+}
+
+// Insert is a convenience method for Model.Insert.
+func Insert(data ...interface{}) (result sql.Result, err error) {
+	return Model.Insert(data...)
+}
+
+// InsertIgnore is a convenience method for Model.InsertIgnore.
+func InsertIgnore(data ...interface{}) (result sql.Result, err error) {
+	return Model.InsertIgnore(data...)
+}
+
+// Replace is a convenience method for Model.Replace.
+func Replace(data ...interface{}) (result sql.Result, err error) {
+	return Model.Replace(data...)
+}
+
+// Save is a convenience method for Model.Save.
+func Save(data ...interface{}) (result sql.Result, err error) {
+	return Model.Save(data...)
+}
+
+// Update is a convenience method for Model.Update.
+func Update(dataAndWhere ...interface{}) (result sql.Result, err error) {
+	return Model.Update(dataAndWhere...)
+}
+
+// Delete is a convenience method for Model.Delete.
+func Delete(where ...interface{}) (result sql.Result, err error) {
+	return Model.Delete(where...)
+}
+
+// As sets an alias name for current table.
+func (m *arModel) As(as string) *arModel {
+	return &arModel{m.M.As(as)}
+}
+
 // TX sets the transaction for current operation.
 func (m *arModel) TX(tx *gdb.TX) *arModel {
-	return &arModel{m.Model.TX(tx)}
+	return &arModel{m.M.TX(tx)}
 }
 
 // Master marks the following operation on master node.
 func (m *arModel) Master() *arModel {
-	return &arModel{m.Model.Master()}
+	return &arModel{m.M.Master()}
 }
 
 // Slave marks the following operation on slave node.
 // Note that it makes sense only if there's any slave node configured.
 func (m *arModel) Slave() *arModel {
-	return &arModel{m.Model.Slave()}
+	return &arModel{m.M.Slave()}
 }
 
 // LeftJoin does "LEFT JOIN ... ON ..." statement on the model.
-func (m *arModel) LeftJoin(joinTable string, on string) *arModel {
-	return &arModel{m.Model.LeftJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").LeftJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").LeftJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) LeftJoin(table ...string) *arModel {
+	return &arModel{m.M.LeftJoin(table...)}
 }
 
 // RightJoin does "RIGHT JOIN ... ON ..." statement on the model.
-func (m *arModel) RightJoin(joinTable string, on string) *arModel {
-	return &arModel{m.Model.RightJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").RightJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").RightJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) RightJoin(table ...string) *arModel {
+	return &arModel{m.M.RightJoin(table...)}
 }
 
 // InnerJoin does "INNER JOIN ... ON ..." statement on the model.
-func (m *arModel) InnerJoin(joinTable string, on string) *arModel {
-	return &arModel{m.Model.InnerJoin(joinTable, on)}
+// The parameter <table> can be joined table and its joined condition,
+// and also with its alias name, like:
+// Table("user").InnerJoin("user_detail", "user_detail.uid=user.uid")
+// Table("user", "u").InnerJoin("user_detail", "ud", "ud.uid=u.uid")
+func (m *arModel) InnerJoin(table ...string) *arModel {
+	return &arModel{m.M.InnerJoin(table...)}
 }
 
 // Fields sets the operation fields of the model, multiple fields joined using char ','.
 func (m *arModel) Fields(fields string) *arModel {
-	return &arModel{m.Model.Fields(fields)}
+	return &arModel{m.M.Fields(fields)}
 }
 
 // FieldsEx sets the excluded operation fields of the model, multiple fields joined using char ','.
 func (m *arModel) FieldsEx(fields string) *arModel {
-	return &arModel{m.Model.FieldsEx(fields)}
+	return &arModel{m.M.FieldsEx(fields)}
 }
 
 // Option sets the extra operation option for the model.
 func (m *arModel) Option(option int) *arModel {
-	return &arModel{m.Model.Option(option)}
+	return &arModel{m.M.Option(option)}
 }
 
 // OmitEmpty sets OPTION_OMITEMPTY option for the model, which automatically filers
 // the data and where attributes for empty values.
 func (m *arModel) OmitEmpty() *arModel {
-	return &arModel{m.Model.OmitEmpty()}
+	return &arModel{m.M.OmitEmpty()}
 }
 
 // Filter marks filtering the fields which does not exist in the fields of the operated table.
 func (m *arModel) Filter() *arModel {
-	return &arModel{m.Model.Filter()}
+	return &arModel{m.M.Filter()}
 }
 
 // Where sets the condition statement for the model. The parameter <where> can be type of
@@ -92,27 +206,27 @@ func (m *arModel) Filter() *arModel {
 // Where("age IN(?,?)", 18, 50)
 // Where(User{ Id : 1, UserName : "john"})
 func (m *arModel) Where(where interface{}, args ...interface{}) *arModel {
-	return &arModel{m.Model.Where(where, args...)}
+	return &arModel{m.M.Where(where, args...)}
 }
 
 // And adds "AND" condition to the where statement.
 func (m *arModel) And(where interface{}, args ...interface{}) *arModel {
-	return &arModel{m.Model.And(where, args...)}
+	return &arModel{m.M.And(where, args...)}
 }
 
 // Or adds "OR" condition to the where statement.
 func (m *arModel) Or(where interface{}, args ...interface{}) *arModel {
-	return &arModel{m.Model.Or(where, args...)}
+	return &arModel{m.M.Or(where, args...)}
 }
 
-// GroupBy sets the "GROUP BY" statement for the model.
-func (m *arModel) GroupBy(groupBy string) *arModel {
-	return &arModel{m.Model.GroupBy(groupBy)}
+// Group sets the "GROUP BY" statement for the model.
+func (m *arModel) Group(groupBy string) *arModel {
+	return &arModel{m.M.Group(groupBy)}
 }
 
-// OrderBy sets the "ORDER BY" statement for the model.
-func (m *arModel) OrderBy(orderBy string) *arModel {
-	return &arModel{m.Model.OrderBy(orderBy)}
+// Order sets the "ORDER BY" statement for the model.
+func (m *arModel) Order(orderBy ...string) *arModel {
+	return &arModel{m.M.Order(orderBy...)}
 }
 
 // Limit sets the "LIMIT" statement for the model.
@@ -120,25 +234,25 @@ func (m *arModel) OrderBy(orderBy string) *arModel {
 // it then sets "LIMIT limit[0],limit[1]" statement for the model, or else it sets "LIMIT limit[0]"
 // statement.
 func (m *arModel) Limit(limit ...int) *arModel {
-	return &arModel{m.Model.Limit(limit...)}
+	return &arModel{m.M.Limit(limit...)}
 }
 
 // Offset sets the "OFFSET" statement for the model.
 // It only makes sense for some databases like SQLServer, PostgreSQL, etc.
 func (m *arModel) Offset(offset int) *arModel {
-	return &arModel{m.Model.Offset(offset)}
+	return &arModel{m.M.Offset(offset)}
 }
 
-// ForPage sets the paging number for the model.
+// Page sets the paging number for the model.
 // The parameter <page> is started from 1 for paging.
 // Note that, it differs that the Limit function start from 0 for "LIMIT" statement.
-func (m *arModel) ForPage(page, limit int) *arModel {
-	return &arModel{m.Model.Page(page, limit)}
+func (m *arModel) Page(page, limit int) *arModel {
+	return &arModel{m.M.Page(page, limit)}
 }
 
 // Batch sets the batch operation number for the model.
 func (m *arModel) Batch(batch int) *arModel {
-	return &arModel{m.Model.Batch(batch)}
+	return &arModel{m.M.Batch(batch)}
 }
 
 // Cache sets the cache feature for the model. It caches the result of the sql, which means
@@ -153,8 +267,8 @@ func (m *arModel) Batch(batch int) *arModel {
 // control the cache like changing the <duration> or clearing the cache with specified <name>.
 //
 // Note that, the cache feature is disabled if the model is operating on a transaction.
-func (m *arModel) Cache(expire time.Duration, name ...string) *arModel {
-	return &arModel{m.Model.Cache(expire, name...)}
+func (m *arModel) Cache(duration time.Duration, name ...string) *arModel {
+	return &arModel{m.M.Cache(duration, name...)}
 }
 
 // Data sets the operation data for the model.
@@ -165,46 +279,17 @@ func (m *arModel) Cache(expire time.Duration, name ...string) *arModel {
 // Data(g.Map{"uid": 10000, "name":"john"})
 // Data(g.Slice{g.Map{"uid": 10000, "name":"john"}, g.Map{"uid": 20000, "name":"smith"})
 func (m *arModel) Data(data ...interface{}) *arModel {
-	return &arModel{m.Model.Data(data...)}
-}
-
-// Insert does "INSERT INTO ..." statement for the model.
-func (m *arModel) Insert() (result sql.Result, err error) {
-	return m.Model.Insert()
-}
-
-// Replace does "REPLACE INTO ..." statement for the model.
-func (m *arModel) Replace() (result sql.Result, err error) {
-	return m.Model.Replace()
-}
-
-// Save does "INSERT INTO ... ON DUPLICATE KEY UPDATE..." statement for the model.
-// It updates the record if there's primary or unique index in the saving data,
-// or else it inserts a new record into the table.
-func (m *arModel) Save() (result sql.Result, err error) {
-	return m.Model.Save()
-}
-
-// Update does "UPDATE ... " statement for the model.
-func (m *arModel) Update() (result sql.Result, err error) {
-	return m.Model.Update()
-}
-
-// Delete does "DELETE FROM ... " statement for the model.
-func (m *arModel) Delete() (result sql.Result, err error) {
-	return m.Model.Delete()
-}
-
-// Count does "SELECT COUNT(x) FROM ..." statement for the model.
-func (m *arModel) Count() (int, error) {
-	return m.Model.Count()
+	return &arModel{m.M.Data(data...)}
 }
 
 // All does "SELECT FROM ..." statement for the model.
 // It retrieves the records from table and returns the result as []*Entity.
 // It returns nil if there's no record retrieved with the given conditions from table.
-func (m *arModel) All() ([]*Entity, error) {
-	all, err := m.Model.All()
+//
+// The optional parameter <where> is the same as the parameter of Model.Where function,
+// see Model.Where.
+func (m *arModel) All(where ...interface{}) ([]*Entity, error) {
+	all, err := m.M.All(where...)
 	if err != nil {
 		return nil, err
 	}
@@ -217,8 +302,11 @@ func (m *arModel) All() ([]*Entity, error) {
 
 // One retrieves one record from table and returns the result as *Entity.
 // It returns nil if there's no record retrieved with the given conditions from table.
-func (m *arModel) One() (*Entity, error) {
-	one, err := m.Model.One()
+//
+// The optional parameter <where> is the same as the parameter of Model.Where function,
+// see Model.Where.
+func (m *arModel) One(where ...interface{}) (*Entity, error) {
+	one, err := m.M.One(where...)
 	if err != nil {
 		return nil, err
 	}
@@ -229,15 +317,37 @@ func (m *arModel) One() (*Entity, error) {
 	return entity, nil
 }
 
-// Value retrieves a specified record value from table and returns the result as interface type.
-// It returns nil if there's no record found with the given conditions from table.
-func (m *arModel) Value() (gdb.Value, error) {
-	return m.Model.Value()
+// FindOne retrieves and returns a single Record by Model.WherePri and Model.One.
+// Also see Model.WherePri and Model.One.
+func (m *arModel) FindOne(where ...interface{}) (*Entity, error) {
+	one, err := m.M.FindOne(where...)
+	if err != nil {
+		return nil, err
+	}
+	var entity *Entity
+	if err = one.Struct(&entity); err != nil && err != sql.ErrNoRows {
+		return nil, err
+	}
+	return entity, nil
+}
+
+// FindAll retrieves and returns Result by by Model.WherePri and Model.All.
+// Also see Model.WherePri and Model.All.
+func (m *arModel) FindAll(where ...interface{}) ([]*Entity, error) {
+	all, err := m.M.FindAll(where...)
+	if err != nil {
+		return nil, err
+	}
+	var entities []*Entity
+	if err = all.Structs(&entities); err != nil && err != sql.ErrNoRows {
+		return nil, err
+	}
+	return entities, nil
 }
 
 // Chunk iterates the table with given size and callback function.
 func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error) bool) {
-	m.Model.Chunk(limit, func(result gdb.Result, err error) bool {
+	m.M.Chunk(limit, func(result gdb.Result, err error) bool {
 		var entities []*Entity
 		err = result.Structs(&entities)
 		if err == sql.ErrNoRows {
@@ -246,3 +356,18 @@ func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error)
 		return callback(entities, err)
 	})
 }
+
+// LockUpdate sets the lock for update for current operation.
+func (m *arModel) LockUpdate() *arModel {
+	return &arModel{m.M.LockUpdate()}
+}
+
+// LockShared sets the lock in share mode for current operation.
+func (m *arModel) LockShared() *arModel {
+	return &arModel{m.M.LockShared()}
+}
+
+// Unscoped enables/disables the soft deleting feature.
+func (m *arModel) Unscoped() *arModel {
+	return &arModel{m.M.Unscoped()}
+}

+ 2 - 2
app/model/admin/user_post/user_post.go

@@ -30,7 +30,7 @@ func AddUserPost(postIds []int64, userId int64) (err error) {
 }
 
 //获取用户岗位
-func GetAdminPosts(userId int) (postIds []int64, err error) {
+func GetAdminPosts(userId uint64) (postIds []int64, err error) {
 	list, e := Model.All(Columns.UserId, userId)
 	if e != nil {
 		g.Log().Error(e)
@@ -44,7 +44,7 @@ func GetAdminPosts(userId int) (postIds []int64, err error) {
 }
 
 //根据用户id获取岗位信息详情
-func GetPostsByUserId(userId int) ([]*sys_post.Entity, error) {
+func GetPostsByUserId(userId uint64) ([]*sys_post.Entity, error) {
 	model := g.DB().Table(Table)
 	datas := ([]*sys_post.Entity)(nil)
 	err := model.As("a").InnerJoin("sys_post b", "a.post_id = b.post_id").Fields("b.*").Where(Columns.UserId, userId).Structs(&datas)

+ 1 - 1
app/service/admin/cms_service/news.go

@@ -14,7 +14,7 @@ import (
 )
 
 //添加文章操作
-func AddNews(req *cms_news.ReqAddParams, cateIds []int, userId int) (insId int64, err error) {
+func AddNews(req *cms_news.ReqAddParams, cateIds []int, userId uint64) (insId int64, err error) {
 	cateIds, err = getPubCateIds(cateIds)
 	if err != nil {
 		return

+ 1 - 1
app/service/admin/dept_service/dept.go

@@ -29,7 +29,7 @@ func EditDept(data *sys_dept.EditParams) error {
 	return sys_dept.EditDept(data)
 }
 
-func GetDeptById(id int64) (*sys_dept.Dept, error) {
+func GetDeptById(id uint64) (*sys_dept.Dept, error) {
 	return sys_dept.GetDeptById(id)
 }
 

+ 2 - 2
app/service/admin/dict_service/dict_data.go

@@ -5,12 +5,12 @@ import (
 )
 
 //添加字典数据操作
-func AddSaveData(req *sys_dict_data.AddDataReq, userId int) (int64, error) {
+func AddSaveData(req *sys_dict_data.AddDataReq, userId uint64) (int64, error) {
 	return sys_dict_data.AddSaveData(req, userId)
 }
 
 //修改字典数据操作
-func EditSaveData(req *sys_dict_data.EditDataReq, userId int) (int64, error) {
+func EditSaveData(req *sys_dict_data.EditDataReq, userId uint64) (int64, error) {
 	return sys_dict_data.EditSaveData(req, userId)
 }
 

+ 2 - 2
app/service/admin/dict_service/dict_type.go

@@ -19,12 +19,12 @@ func CheckDictTypeUnique(dictType *sys_dict_type.EditReq) bool {
 }
 
 //添加数据
-func AddSave(req *sys_dict_type.AddReq, userId int) (int64, error) {
+func AddSave(req *sys_dict_type.AddReq, userId uint64) (int64, error) {
 	return sys_dict_type.AddSave(req, userId)
 }
 
 //修改保存字典类型
-func EditSave(req *sys_dict_type.EditReq, userId int) (int64, error) {
+func EditSave(req *sys_dict_type.EditReq, userId uint64) (int64, error) {
 	return sys_dict_type.EditSave(req, userId)
 }
 

+ 2 - 2
app/service/admin/monitor_service/job.go

@@ -17,12 +17,12 @@ func init() {
 }
 
 //添加计划任务
-func AddJob(req *sys_job.ReqAdd, userId int) (id int64, err error) {
+func AddJob(req *sys_job.ReqAdd, userId uint64) (id int64, err error) {
 	return sys_job.Add(req, userId)
 }
 
 //修改计划任务
-func EditJob(req *sys_job.ReqEdit, userId int) (rows int64, err error) {
+func EditJob(req *sys_job.ReqEdit, userId uint64) (rows int64, err error) {
 	return sys_job.Edit(req, userId)
 }
 

+ 2 - 2
app/service/admin/params_service/params.go

@@ -7,12 +7,12 @@ import (
 )
 
 //保存参数
-func AddSave(req *sys_config.AddReq, userId int) (id int64, err error) {
+func AddSave(req *sys_config.AddReq, userId uint64) (id int64, err error) {
 	return sys_config.AddSave(req, userId)
 }
 
 //修改保存
-func EditSave(req *sys_config.EditReq, userId int) (int64, error) {
+func EditSave(req *sys_config.EditReq, userId uint64) (int64, error) {
 	return sys_config.EditSave(req, userId)
 }
 

+ 8 - 8
app/service/admin/user_service/user.go

@@ -104,12 +104,12 @@ func GetCurrentUserInfo(r *ghttp.Request) (map[string]interface{}, error) {
 
 }
 
-func GetPostsByUserId(id int) ([]*sys_post.Entity, error) {
+func GetPostsByUserId(id uint64) ([]*sys_post.Entity, error) {
 	return user_post.GetPostsByUserId(id)
 }
 
 //获取登陆用户ID
-func GetLoginID(r *ghttp.Request) (userId int) {
+func GetLoginID(r *ghttp.Request) (userId uint64) {
 	userInfo := GetLoginAdminInfo(r)
 	if userInfo != nil {
 		userId = userInfo.Id
@@ -156,7 +156,7 @@ func GetAdminList(req *user.SearchReq) (total, page int, userList []*user.Entity
 }
 
 //获取管理员的角色信息
-func GetAdminRole(userId int, allRoleList []*role.Entity) (roles []*role.Entity, err error) {
+func GetAdminRole(userId uint64, allRoleList []*role.Entity) (roles []*role.Entity, err error) {
 	roleIds, err := GetAdminRoleIds(userId)
 	if err != nil {
 		return
@@ -173,7 +173,7 @@ func GetAdminRole(userId int, allRoleList []*role.Entity) (roles []*role.Entity,
 }
 
 //获取管理员对应的角色ids
-func GetAdminRoleIds(userId int) (roleIds []int, err error) {
+func GetAdminRoleIds(userId uint64) (roleIds []uint, err error) {
 	enforcer, e := casbin_adapter_service.GetEnforcer()
 	if e != nil {
 		err = e
@@ -182,16 +182,16 @@ func GetAdminRoleIds(userId int) (roleIds []int, err error) {
 	//查询关联角色规则
 	groupPolicy := enforcer.GetFilteredGroupingPolicy(0, fmt.Sprintf("u_%d", userId))
 	if len(groupPolicy) > 0 {
-		roleIds = make([]int, len(groupPolicy))
+		roleIds = make([]uint, len(groupPolicy))
 		//得到角色id的切片
 		for k, v := range groupPolicy {
-			roleIds[k] = gconv.Int(gstr.SubStr(v[1], 2))
+			roleIds[k] = gconv.Uint(gstr.SubStr(v[1], 2))
 		}
 	}
 	return
 }
 
-func GetAdminPosts(userId int) (postIds []int64, err error) {
+func GetAdminPosts(userId uint64) (postIds []int64, err error) {
 	return user_post.GetAdminPosts(userId)
 }
 
@@ -213,7 +213,7 @@ func GetAllMenus() (menus g.List, err error) {
 }
 
 //获取管理员所属角色菜单
-func GetAdminMenusByRoleIds(roleIds []int) (menus g.List, err error) {
+func GetAdminMenusByRoleIds(roleIds []uint) (menus g.List, err error) {
 	//获取角色对应的菜单id
 	enforcer, e := casbin_adapter_service.GetEnforcer()
 	if e != nil {

+ 2 - 2
go.mod

@@ -7,8 +7,8 @@ require (
 	github.com/go-ole/go-ole v1.2.4 // indirect
 	github.com/go-openapi/spec v0.19.8 // indirect
 	github.com/go-openapi/swag v0.19.9 // indirect
-	github.com/goflyfox/gtoken v1.3.18
-	github.com/gogf/gf v1.13.3
+	github.com/goflyfox/gtoken v1.3.19
+	github.com/gogf/gf v1.13.6
 	github.com/mailru/easyjson v0.7.1 // indirect
 	github.com/mojocn/base64Captcha v1.3.1
 	github.com/mssola/user_agent v0.5.1

+ 5 - 17
go.sum

@@ -15,8 +15,6 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafo
 github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/casbin/casbin/v2 v2.1.2 h1:bTwon/ECRx9dwBy2ewRVr5OiqjeXSGiTUY74sDPQi/g=
 github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
-github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I=
-github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng=
 github.com/clbanning/mxj v1.8.5-0.20200714211355-ff02cfb8ea28 h1:LdXxtjzvZYhhUaonAaAKArG3pyC67kGL3YY+6hGG8G4=
 github.com/clbanning/mxj v1.8.5-0.20200714211355-ff02cfb8ea28/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng=
 github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
@@ -24,12 +22,8 @@ github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
-github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
 github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/gf-third/yaml v1.0.1 h1:pqD4ix+65DqGphU1MDnToPZfGYk0tuuwRzuTSl3g0d0=
-github.com/gf-third/yaml v1.0.1/go.mod h1:t443vj0txEw3+E0MOtkr83kt+PrZg2I8SRuYfn85NM0=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/gin-contrib/gzip v0.0.1/go.mod h1:fGBJBCdt6qCZuCAOwWuFhBB4OOq9EFqlo5dEaFhhu5w=
 github.com/gin-contrib/sse v0.0.0-20170109093832-22d885f9ecc7/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
@@ -61,11 +55,11 @@ github.com/go-openapi/swag v0.19.9 h1:1IxuqvBUU3S2Bi4YC7tlP9SJF1gVpCvqN0T2Qof4az
 github.com/go-openapi/swag v0.19.9/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY=
 github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
 github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
-github.com/goflyfox/gtoken v1.3.18 h1:LD9FFWJxYRVlCw+Xw07UT/PBkLJC60hD3kQr+9KVF2A=
-github.com/goflyfox/gtoken v1.3.18/go.mod h1:a9Q08qaHzoS+ko/AFrCBnq4KCesnRFZ/3eLIiERRhtU=
-github.com/gogf/gf v1.12.1/go.mod h1:5ItmC5B/St8P4hp0/waKmnvHwAfAJ1uspMvR2wUD4UA=
-github.com/gogf/gf v1.13.3 h1:wdyNAzOSztDkabTEqRmPeJJT93p2qBK/jPK5x+8CRSE=
-github.com/gogf/gf v1.13.3/go.mod h1:dGX0/BElXDBYbdJGascqfrWScj8IMeOietDjVD6/5Fc=
+github.com/goflyfox/gtoken v1.3.19 h1:p0fhXybMNwB1sFn+DnCOQkE/IbLaNE31rRLIGZ+qShk=
+github.com/goflyfox/gtoken v1.3.19/go.mod h1:b1ffjYH5cBEtiEGwLsRxtl0s0ler06hAvbYKa9IkbR4=
+github.com/gogf/gf v1.13.4/go.mod h1:dGX0/BElXDBYbdJGascqfrWScj8IMeOietDjVD6/5Fc=
+github.com/gogf/gf v1.13.6 h1:wm/eaVdViAcO7KqZCOCc/lzgGdBSDTRn7cDQ5gWMddw=
+github.com/gogf/gf v1.13.6/go.mod h1:dGX0/BElXDBYbdJGascqfrWScj8IMeOietDjVD6/5Fc=
 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -73,8 +67,6 @@ github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y
 github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0=
 github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
-github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM=
 github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
 github.com/gqcn/structs v1.1.1 h1:cyzGRwfmn3d1d54fwW3KUNyG9QxR0ldIeqwFGeBt638=
@@ -100,8 +92,6 @@ github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7
 github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
 github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
 github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
-github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54=
-github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
 github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
 github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -174,8 +164,6 @@ golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5h
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e h1:9vRrk9YW2BTzLP0VCB9ZDjU4cPqkg+IDWL7XgxA1yxQ=
-golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo=
 golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=

+ 1 - 1
library/service/service.go

@@ -127,7 +127,7 @@ func LoginOut(r *ghttp.Request) bool {
 }
 
 // 用户登录,成功返回用户信息,否则返回nil
-func signIn(username, password string, r *ghttp.Request) (error, *user.User) {
+func signIn(username, password string, r *ghttp.Request) (error, *user.Entity) {
 	user, err := user.Model.Where("user_name=? and user_password=?", username, password).One()
 	if err != nil && err != sql.ErrNoRows {
 		return err, nil

+ 2 - 1
middleWare/middleware.go

@@ -11,6 +11,7 @@ import (
 	"github.com/gogf/gf/frame/g"
 	"github.com/gogf/gf/net/ghttp"
 	"github.com/gogf/gf/text/gstr"
+	"github.com/gogf/gf/util/gconv"
 )
 
 //跨域处理中间件
@@ -28,7 +29,7 @@ func Auth(r *ghttp.Request) {
 	adminId := user_service.GetLoginID(r)
 	//获取无需验证权限的用户id
 	for _, v := range service.NotCheckAuthAdminIds {
-		if v == adminId {
+		if gconv.Uint64(v) == adminId {
 			r.Middleware.Next()
 			return
 		}