mirror of
https://github.com/tiger1103/gfast.git
synced 2026-09-21 10:12:59 +00:00
接口修改
This commit is contained in:
+242
-67
@@ -4,8 +4,13 @@ import (
|
||||
"fmt"
|
||||
"gfast/app/model/admin/auth_rule"
|
||||
"gfast/app/model/admin/role"
|
||||
"gfast/app/model/admin/sys_dept"
|
||||
"gfast/app/model/admin/user"
|
||||
"gfast/app/model/admin/user_post"
|
||||
"gfast/app/service/admin/auth_service"
|
||||
"gfast/app/service/admin/dept_service"
|
||||
"gfast/app/service/admin/dict_service"
|
||||
"gfast/app/service/admin/post_service"
|
||||
"gfast/app/service/admin/user_service"
|
||||
"gfast/app/service/cache_service"
|
||||
"gfast/app/service/casbin_adapter_service"
|
||||
@@ -23,16 +28,46 @@ type Auth struct{}
|
||||
|
||||
//菜单列表
|
||||
func (c *Auth) MenuList(r *ghttp.Request) {
|
||||
//获取菜单信息
|
||||
listEntities, err := auth_service.GetMenuList()
|
||||
var req *auth_rule.ReqSearch
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
var listEntities []*auth_rule.Entity
|
||||
var err error
|
||||
if req != nil {
|
||||
listEntities, err = auth_service.GetMenuListSearch(req)
|
||||
} else {
|
||||
//获取菜单信息
|
||||
listEntities, err = auth_service.GetMenuList()
|
||||
}
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取数据失败")
|
||||
}
|
||||
list := gconv.SliceMap(listEntities)
|
||||
list = utils.PushSonToParent(list)
|
||||
if req != nil {
|
||||
for k := range list {
|
||||
list[k]["children"] = nil
|
||||
}
|
||||
} else {
|
||||
list = utils.PushSonToParent(list, 0, "pid", "id", "children", "", nil, true)
|
||||
}
|
||||
//菜单显示状态
|
||||
visibleOptions, err := dict_service.GetDictWithDataByType("sys_show_hide", "", "")
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
//菜单正常or停用状态
|
||||
statusOptions, err := dict_service.GetDictWithDataByType("sys_normal_disable", "", "")
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
|
||||
response.SusJson(true, r, "成功", g.Map{
|
||||
"list": list,
|
||||
"list": list,
|
||||
"visibleOptions": visibleOptions,
|
||||
"statusOptions": statusOptions,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -61,6 +96,10 @@ func (c *Auth) AddMenu(r *ghttp.Request) {
|
||||
if !auth_service.CheckMenuNameUnique(menu.Name, 0) {
|
||||
response.FailJson(true, r, "菜单规则名称已经存在")
|
||||
}
|
||||
//判断路由是否已经存在
|
||||
if !auth_service.CheckMenuPathUnique(menu.Path, 0) {
|
||||
response.FailJson(true, r, "路由地址已经存在")
|
||||
}
|
||||
//保存到数据库
|
||||
err, _ := auth_service.AddMenu(menu)
|
||||
if err != nil {
|
||||
@@ -76,14 +115,12 @@ func (c *Auth) AddMenu(r *ghttp.Request) {
|
||||
if err != nil {
|
||||
response.FailJson(true, r, "获取数据失败")
|
||||
}
|
||||
list := gconv.SliceMap(listEntities)
|
||||
list = utils.ParentSonSort(list)
|
||||
response.SusJson(true, r, "成功", g.Map{"parentList": list})
|
||||
response.SusJson(true, r, "成功", g.Map{"parentList": listEntities})
|
||||
}
|
||||
|
||||
//修改菜单
|
||||
func (c *Auth) EditMenu(r *ghttp.Request) {
|
||||
id := r.GetInt("id")
|
||||
id := r.GetInt("menuId")
|
||||
if r.Method == "POST" {
|
||||
menu := new(auth_rule.MenuReq)
|
||||
if err := r.Parse(menu); err != nil {
|
||||
@@ -93,6 +130,10 @@ func (c *Auth) EditMenu(r *ghttp.Request) {
|
||||
if !auth_service.CheckMenuNameUnique(menu.Name, id) {
|
||||
response.FailJson(true, r, "菜单规则名称已经存在")
|
||||
}
|
||||
//判断路由是否已经存在
|
||||
if !auth_service.CheckMenuPathUnique(menu.Path, id) {
|
||||
response.FailJson(true, r, "路由地址已经存在")
|
||||
}
|
||||
//保存到数据库
|
||||
err, _ := auth_service.EditMenu(menu, id)
|
||||
if err != nil {
|
||||
@@ -139,16 +180,27 @@ func (c *Auth) DeleteMenu(r *ghttp.Request) {
|
||||
|
||||
//角色列表
|
||||
func (c *Auth) RoleList(r *ghttp.Request) {
|
||||
var req *role.SelectPageReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
//获取角色列表
|
||||
listEntities, err := auth_service.GetRoleList()
|
||||
total, page, list, err := auth_service.GetRoleListSearch(req)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取数据失败")
|
||||
}
|
||||
list := gconv.SliceMap(listEntities)
|
||||
list = utils.PushSonToParent(list, 0, "parent_id", "id", "children", "", nil, false)
|
||||
//菜单正常or停用状态
|
||||
statusOptions, err := dict_service.GetDictWithDataByType("sys_normal_disable", "", "")
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
response.SusJson(true, r, "成功", g.Map{
|
||||
"list": list,
|
||||
"currentPage": page,
|
||||
"total": total,
|
||||
"list": list,
|
||||
"searchTypes": statusOptions,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -158,6 +210,7 @@ func (c *Auth) AddRole(r *ghttp.Request) {
|
||||
if r.Method == "POST" {
|
||||
//获取表单提交的数据
|
||||
res := r.GetFormMap()
|
||||
|
||||
tx, err := g.DB("default").Begin() //开启事务
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
@@ -171,43 +224,43 @@ func (c *Auth) AddRole(r *ghttp.Request) {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
//添加角色权限
|
||||
err = auth_service.AddRoleRule(res["rule"], insertId)
|
||||
err = auth_service.AddRoleRule(res["menuIds"], insertId)
|
||||
if err != nil {
|
||||
tx.Rollback() //回滚
|
||||
g.Log().Error(err.Error())
|
||||
response.FailJson(true, r, "添加用户组失败")
|
||||
response.FailJson(true, r, "添加角色失败")
|
||||
}
|
||||
tx.Commit()
|
||||
//清除TAG缓存
|
||||
cache_service.New().RemoveByTag(cache_service.AdminAuthTag)
|
||||
response.SusJson(true, r, "添加用户组成功")
|
||||
response.SusJson(true, r, "添加角色成功")
|
||||
}
|
||||
//获取父级组
|
||||
pListEntities, err := auth_service.GetRoleList()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取父级数据失败")
|
||||
}
|
||||
pList := gconv.SliceMap(pListEntities)
|
||||
pList = utils.ParentSonSort(pList, 0, 0, "parent_id", "id", "flg", "name")
|
||||
|
||||
//获取菜单信息
|
||||
mListEntities, err := auth_service.GetMenuList()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取菜单数据失败")
|
||||
}
|
||||
mList := gconv.SliceMap(mListEntities)
|
||||
var mList g.ListStrAny
|
||||
for _, entity := range mListEntities {
|
||||
m := g.Map{
|
||||
"id": entity.Id,
|
||||
"pid": entity.Pid,
|
||||
"label": entity.Title,
|
||||
}
|
||||
mList = append(mList, m)
|
||||
}
|
||||
mList = utils.PushSonToParent(mList)
|
||||
res := g.Map{
|
||||
"parentList": pList,
|
||||
"menuList": mList,
|
||||
"menuList": mList,
|
||||
}
|
||||
response.SusJson(true, r, "成功", res)
|
||||
}
|
||||
|
||||
//修改角色
|
||||
func (c *Auth) EditRole(r *ghttp.Request) {
|
||||
id := r.GetRequestInt64("id")
|
||||
id := r.GetRequestInt64("roleId")
|
||||
if r.Method == "POST" {
|
||||
//获取表单提交的数据
|
||||
res := r.GetFormMap()
|
||||
@@ -223,7 +276,7 @@ func (c *Auth) EditRole(r *ghttp.Request) {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
//添加角色权限
|
||||
err = auth_service.EditRoleRule(res["rule"], id)
|
||||
err = auth_service.EditRoleRule(res["menuIds"], id)
|
||||
if err != nil {
|
||||
tx.Rollback() //回滚
|
||||
g.Log().Error(err.Error())
|
||||
@@ -239,14 +292,7 @@ func (c *Auth) EditRole(r *ghttp.Request) {
|
||||
if err != nil {
|
||||
response.FailJson(true, r, "获取角色数据失败")
|
||||
}
|
||||
//获取父级组
|
||||
pListEntities, err := auth_service.GetRoleList()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取父级数据失败")
|
||||
}
|
||||
pList := gconv.SliceMap(pListEntities)
|
||||
pList = utils.ParentSonSort(pList, 0, 0, "parent_id", "id", "flg", "name")
|
||||
|
||||
//获取菜单信息
|
||||
mListEntities, err := auth_service.GetMenuList()
|
||||
if err != nil {
|
||||
@@ -264,10 +310,19 @@ func (c *Auth) EditRole(r *ghttp.Request) {
|
||||
for k, v := range gp {
|
||||
gpSlice[k] = gconv.Int(gstr.SubStr(v[1], 2))
|
||||
}
|
||||
mList := gconv.SliceMap(mListEntities)
|
||||
|
||||
var mList g.ListStrAny
|
||||
for _, entity := range mListEntities {
|
||||
m := g.Map{
|
||||
"id": entity.Id,
|
||||
"pid": entity.Pid,
|
||||
"label": entity.Title,
|
||||
}
|
||||
mList = append(mList, m)
|
||||
}
|
||||
|
||||
mList = utils.PushSonToParent(mList)
|
||||
res := g.Map{
|
||||
"parentList": pList,
|
||||
"menuList": mList,
|
||||
"role": role,
|
||||
"checkedRules": gpSlice,
|
||||
@@ -293,17 +348,27 @@ func (c *Auth) DeleteRole(r *ghttp.Request) {
|
||||
//添加管理员
|
||||
func (c *Auth) AddUser(r *ghttp.Request) {
|
||||
if r.Method == "POST" {
|
||||
requestData := r.GetFormMap()
|
||||
InsertId, err := auth_service.AddUser(requestData)
|
||||
var req *user.AddUserReq
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
|
||||
InsertId, err := auth_service.AddUser(req)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
//设置用户所属角色信息
|
||||
err = auth_service.AddUserRole(requestData["role_id"], InsertId)
|
||||
err = auth_service.AddUserRole(req.PostIds, InsertId)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "设置用户权限失败")
|
||||
}
|
||||
//设置用户岗位
|
||||
err = auth_service.AddUserPost(req.PostIds, InsertId)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "设置用户岗位信息失败")
|
||||
}
|
||||
response.SusJson(true, r, "添加管理员成功")
|
||||
}
|
||||
//获取角色信息
|
||||
@@ -312,31 +377,44 @@ func (c *Auth) AddUser(r *ghttp.Request) {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取角色数据失败")
|
||||
}
|
||||
roleList := gconv.SliceMap(roleListEntities)
|
||||
roleList = utils.ParentSonSort(roleList, 0, 0, "parent_id", "id", "flg", "name")
|
||||
//获取岗位信息
|
||||
posts, err := post_service.GetUsedPost()
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
res := g.Map{
|
||||
"roleList": roleList,
|
||||
"roleList": roleListEntities,
|
||||
"posts": posts,
|
||||
}
|
||||
response.SusJson(true, r, "成功", res)
|
||||
}
|
||||
|
||||
//修改管理员
|
||||
func (c *Auth) EditUser(r *ghttp.Request) {
|
||||
id := r.GetRequestInt("id")
|
||||
if r.Method == "POST" {
|
||||
requestData := r.GetFormMap()
|
||||
err := auth_service.EditUser(requestData)
|
||||
var req *user.EditUserReq
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
err := auth_service.EditUser(req)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
//设置用户所属角色信息
|
||||
err = auth_service.EditUserRole(requestData["role_id"], id)
|
||||
err = auth_service.EditUserRole(req.RoleIds, req.UserId)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "设置用户权限失败")
|
||||
}
|
||||
//设置用户岗位数据
|
||||
err = auth_service.AddUserPost(req.PostIds, gconv.Int64(req.UserId))
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "设置用户岗位信息失败")
|
||||
}
|
||||
response.SusJson(true, r, "修改管理员成功")
|
||||
}
|
||||
id := r.GetRequestInt("id")
|
||||
//用户用户信息
|
||||
userEntity, err := user.Model.Where("id=?", id).One()
|
||||
if err != nil {
|
||||
@@ -349,34 +427,46 @@ func (c *Auth) EditUser(r *ghttp.Request) {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取角色数据失败")
|
||||
}
|
||||
roleList := gconv.SliceMap(roleListEntities)
|
||||
roleList = utils.ParentSonSort(roleList, 0, 0, "parent_id", "id", "flg", "name")
|
||||
|
||||
//获取已选择的角色信息
|
||||
checkedRoleIds, err := user_service.GetAdminRoleIds(id)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取用户角色数据失败")
|
||||
}
|
||||
if checkedRoleIds == nil {
|
||||
checkedRoleIds = g.SliceInt{}
|
||||
}
|
||||
//获取岗位信息
|
||||
posts, err := post_service.GetUsedPost()
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
checkedPosts, err := user_service.GetAdminPosts(id)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
if checkedPosts == nil {
|
||||
checkedPosts = []int64{}
|
||||
}
|
||||
res := g.Map{
|
||||
"roleList": roleList,
|
||||
"roleList": roleListEntities,
|
||||
"userInfo": userEntity,
|
||||
"checkedRoleIds": checkedRoleIds,
|
||||
"posts": posts,
|
||||
"checkedPosts": checkedPosts,
|
||||
}
|
||||
response.SusJson(true, r, "成功", res)
|
||||
}
|
||||
|
||||
//用户列表
|
||||
func (c *Auth) UserList(r *ghttp.Request) {
|
||||
keyWords := r.GetString("keywords")
|
||||
page := r.GetInt("page")
|
||||
if page == 0 {
|
||||
page = 1
|
||||
var req *user.SearchReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
var where = map[string]interface{}{}
|
||||
if keyWords != "" {
|
||||
where["keyWords"] = keyWords
|
||||
}
|
||||
total, userList, err := user_service.GetAdminList(where, page)
|
||||
total, page, userList, err := user_service.GetAdminList(req)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取用户列表数据失败")
|
||||
@@ -388,25 +478,49 @@ func (c *Auth) UserList(r *ghttp.Request) {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取用户角色数据失败")
|
||||
}
|
||||
//获取所有部门信息
|
||||
depts, err := dept_service.GetList(&sys_dept.SearchParams{})
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取部门数据失败")
|
||||
}
|
||||
for k, u := range userList {
|
||||
var dept *sys_dept.Dept
|
||||
users[k] = gconv.Map(u)
|
||||
for _, d := range depts {
|
||||
if u.DeptId == d.DeptID {
|
||||
dept = d
|
||||
}
|
||||
}
|
||||
users[k]["dept"] = dept
|
||||
roles, err := user_service.GetAdminRole(u.Id, allRoles)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取用户角色数据失败")
|
||||
}
|
||||
roleInfo := make(map[int]string, len(roles))
|
||||
roleInfo := make([]g.Map, 0, len(roles))
|
||||
for _, r := range roles {
|
||||
roleInfo[r.Id] = r.Name
|
||||
roleInfo = append(roleInfo, g.Map{"roleId": r.Id, "name": r.Name})
|
||||
}
|
||||
users[k]["user_status"] = gconv.String(u.UserStatus)
|
||||
users[k]["roleInfo"] = roleInfo
|
||||
}
|
||||
//获取用户对应角色
|
||||
|
||||
//用户状态
|
||||
statusOptions, err := dict_service.GetDictWithDataByType("sys_normal_disable", "", "")
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
//用户性别
|
||||
userGender, err := dict_service.GetDictWithDataByType("sys_user_sex", "", "")
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
res := g.Map{
|
||||
"total": total,
|
||||
"currentPage": page,
|
||||
"userList": users,
|
||||
"total": total,
|
||||
"currentPage": page,
|
||||
"userList": users,
|
||||
"statusOptions": statusOptions,
|
||||
"userGender": userGender,
|
||||
}
|
||||
response.SusJson(true, r, "成功", res)
|
||||
}
|
||||
@@ -430,5 +544,66 @@ func (c *Auth) DeleteAdmin(r *ghttp.Request) {
|
||||
enforcer.RemoveFilteredGroupingPolicy(0, fmt.Sprintf("u_%d", v))
|
||||
}
|
||||
}
|
||||
//删除用户对应的岗位
|
||||
_, err = user_post.Delete(user_post.Columns.UserId+" in (?)", ids)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
}
|
||||
response.SusJson(true, r, "删除成功")
|
||||
}
|
||||
|
||||
//设置角色状态
|
||||
func (c *Auth) StatusSetRole(r *ghttp.Request) {
|
||||
var req *role.StatusSetReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
err := auth_service.StatusSetRole(req)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
response.SusJson(true, r, "状态设置成功")
|
||||
}
|
||||
|
||||
//角色数据权限分配
|
||||
func (c *Auth) RoleDataScope(r *ghttp.Request) {
|
||||
var req *role.DataScopeReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
err := auth_service.RoleDataScope(req)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
response.SusJson(true, r, "数据权限设置成功", req)
|
||||
}
|
||||
|
||||
//修改用户状态
|
||||
func (c *Auth) ChangeUserStatus(r *ghttp.Request) {
|
||||
var req *user.StatusReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
if err := user_service.ChangeUserStatus(req); err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
} else {
|
||||
response.SusJson(true, r, "用户状态设置成功")
|
||||
}
|
||||
}
|
||||
|
||||
//重置用户密码
|
||||
func (c *Auth) ResetUserPwd(r *ghttp.Request) {
|
||||
var req *user.ResetPwdReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
if err := user_service.ResetUserPwd(req); err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
} else {
|
||||
response.SusJson(true, r, "用户密码重置成功")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,171 +0,0 @@
|
||||
package admin
|
||||
|
||||
import (
|
||||
"gfast/app/model/admin/cms_category"
|
||||
"gfast/app/service/admin/cms_service"
|
||||
"gfast/app/service/admin/dict_service"
|
||||
"gfast/app/service/cache_service"
|
||||
"gfast/library/response"
|
||||
"gfast/library/utils"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/util/gconv"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
//cms栏目管理
|
||||
type CmsMenu struct{}
|
||||
|
||||
func (c *CmsMenu) List(r *ghttp.Request) {
|
||||
var req *cms_category.ReqSearchList
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
var menus []*cms_category.Entity
|
||||
var err error
|
||||
var list g.List
|
||||
if req != nil && req.Name != "" {
|
||||
//按栏目名搜索
|
||||
menus, err = cms_service.GetMenuListSearch(req)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
list = gconv.Maps(menus)
|
||||
} else {
|
||||
//获取所有栏目
|
||||
menus, err = cms_service.GetMenuList()
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
list = gconv.Maps(menus)
|
||||
list = utils.PushSonToParent(list, 0, "parent_id")
|
||||
}
|
||||
res := g.Map{
|
||||
"list": list,
|
||||
}
|
||||
response.SusJson(true, r, "ok", res)
|
||||
}
|
||||
|
||||
//添加栏目分类
|
||||
func (c *CmsMenu) Add(r *ghttp.Request) {
|
||||
if r.Method == "POST" {
|
||||
var req *cms_category.ReqAdd
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
_, err := cms_service.AddSave(req)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
cache_service.New().RemoveByTag(cache_service.AdminCmsTag)
|
||||
response.SusJson(true, r, "栏目添加成功")
|
||||
}
|
||||
//获取上级分类(频道)
|
||||
menus, err := cms_service.GetMenuListChannel()
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
menuTop := []*cms_category.Entity{
|
||||
{
|
||||
Id: 0,
|
||||
ParentId: -1,
|
||||
Status: 1,
|
||||
Name: "最顶级",
|
||||
CateType: 1,
|
||||
},
|
||||
}
|
||||
menus = append(menuTop, menus...)
|
||||
list := gconv.Maps(menus)
|
||||
list = utils.PushSonToParent(list, -1, "parent_id")
|
||||
typeChecker, err := dict_service.GetDictWithDataByType("cms_category_type", "", "")
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
res := g.Map{
|
||||
"menus": list,
|
||||
"typeChecker": typeChecker,
|
||||
}
|
||||
response.SusJson(true, r, "添加栏目", res)
|
||||
}
|
||||
|
||||
//修改栏目
|
||||
func (c *CmsMenu) Edit(r *ghttp.Request) {
|
||||
if r.Method == "POST" {
|
||||
var req *cms_category.ReqEdit
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
_, err := cms_service.EditSave(req)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
cache_service.New().RemoveByTag(cache_service.AdminCmsTag)
|
||||
response.SusJson(true, r, "栏目修改成功")
|
||||
}
|
||||
//获取栏目数据
|
||||
id := r.GetInt("id")
|
||||
menuInfo, err := cms_service.GetMenuInfoById(id)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
if menuInfo == nil {
|
||||
response.FailJson(true, r, "参数错误")
|
||||
}
|
||||
//获取上级分类(频道)
|
||||
menus, err := cms_service.GetMenuListChannel()
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
menuTop := []*cms_category.Entity{
|
||||
{
|
||||
Id: 0,
|
||||
ParentId: -1,
|
||||
Status: 1,
|
||||
Name: "最顶级",
|
||||
CateType: 1,
|
||||
},
|
||||
}
|
||||
menus = append(menuTop, menus...)
|
||||
list := gconv.Maps(menus)
|
||||
list = utils.PushSonToParent(list, -1, "parent_id")
|
||||
typeChecker, err := dict_service.GetDictWithDataByType("cms_category_type", gconv.String(menuInfo.CateType), "")
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
|
||||
res := g.Map{
|
||||
"menuInfo": menuInfo,
|
||||
"menus": list,
|
||||
"typeChecker": typeChecker,
|
||||
}
|
||||
response.SusJson(true, r, "修改栏目", res)
|
||||
}
|
||||
|
||||
//栏目排序
|
||||
func (c *CmsMenu) Sort(r *ghttp.Request) {
|
||||
sorts := r.Get("sorts")
|
||||
s := gconv.Map(sorts)
|
||||
if s == nil {
|
||||
response.FailJson(true, r, "排序失败")
|
||||
}
|
||||
for k, v := range s {
|
||||
cms_category.Model.Where("id=?", k).Data("list_order", v).Update()
|
||||
}
|
||||
cache_service.New().RemoveByTag(cache_service.AdminCmsTag)
|
||||
response.SusJson(true, r, "排序成功")
|
||||
}
|
||||
|
||||
func (c *CmsMenu) Delete(r *ghttp.Request) {
|
||||
ids := r.GetInts("ids")
|
||||
if len(ids) == 0 {
|
||||
response.FailJson(true, r, "删除失败")
|
||||
}
|
||||
err := cms_service.DeleteMenuByIds(ids)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, "删除失败")
|
||||
}
|
||||
response.SusJson(true, r, "删除信息成功", ids)
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
package admin
|
||||
|
||||
import (
|
||||
"gfast/library/response"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
)
|
||||
|
||||
type CmsModel struct{}
|
||||
|
||||
func (c *CmsModel) List(r *ghttp.Request) {
|
||||
response.FailJson(true, r, "功能开发中...")
|
||||
}
|
||||
|
||||
//添加模型
|
||||
func (c *CmsModel) Add(r *ghttp.Request) {
|
||||
response.FailJson(true, r, "功能开发中...")
|
||||
}
|
||||
@@ -1,122 +0,0 @@
|
||||
package admin
|
||||
|
||||
import (
|
||||
"gfast/app/model/admin/cms_news"
|
||||
"gfast/app/service/admin/cms_service"
|
||||
"gfast/app/service/admin/user_service"
|
||||
"gfast/library/response"
|
||||
"gfast/library/utils"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
type CmsNews struct{}
|
||||
|
||||
//信息列表
|
||||
func (c *CmsNews) List(r *ghttp.Request) {
|
||||
var req *cms_news.ReqListSearchParams
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
total, page, list, err := cms_service.NewsListByPage(req)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
//获取可选栏目
|
||||
menus, err := cms_service.GetPublishableMenuList(req.CateId...)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
menus = utils.PushSonToParent(menus, 0, "parent_id")
|
||||
result := g.Map{
|
||||
"currentPage": page,
|
||||
"total": total,
|
||||
"list": list,
|
||||
"menus": menus,
|
||||
}
|
||||
response.SusJson(true, r, "信息列表", result)
|
||||
}
|
||||
|
||||
//添加信息
|
||||
func (c *CmsNews) Add(r *ghttp.Request) {
|
||||
if r.Method == "POST" {
|
||||
var req *cms_news.ReqAddParams
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
cateIds := r.GetInts("cateIds")
|
||||
userId := user_service.GetLoginID(r)
|
||||
_, err := cms_service.AddNews(req, cateIds, userId)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
response.SusJson(true, r, "添加信息成功")
|
||||
}
|
||||
//获取可选栏目
|
||||
menus, err := cms_service.GetPublishableMenuList()
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
menus = utils.PushSonToParent(menus, 0, "parent_id")
|
||||
res := g.Map{
|
||||
"menus": menus,
|
||||
}
|
||||
response.SusJson(true, r, "添加信息", res)
|
||||
}
|
||||
|
||||
//修改信息
|
||||
func (c *CmsNews) Edit(r *ghttp.Request) {
|
||||
if r.Method == "POST" {
|
||||
var req *cms_news.ReqEditParams
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
cateIds := r.GetInts("cateIds")
|
||||
err := cms_service.EditNews(req, cateIds)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
response.SusJson(true, r, "修改信息成功")
|
||||
}
|
||||
id := r.GetInt("id")
|
||||
if id == 0 {
|
||||
response.FailJson(true, r, "参数错误")
|
||||
}
|
||||
//获取文章信息
|
||||
news, err := cms_service.GetNewsById(id)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
checkedCategoryId, err := cms_service.GetCheckedCategoryIdByNewsId(news.Id)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
//获取可选栏目
|
||||
menus, err := cms_service.GetPublishableMenuList(checkedCategoryId...)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
menus = utils.PushSonToParent(menus, 0, "parent_id")
|
||||
res := g.Map{
|
||||
"menus": menus,
|
||||
"news": news,
|
||||
}
|
||||
response.SusJson(true, r, "添加信息", res)
|
||||
}
|
||||
|
||||
//删除信息
|
||||
func (c *CmsNews) Delete(r *ghttp.Request) {
|
||||
ids := r.GetInts("ids")
|
||||
if len(ids) == 0 {
|
||||
response.FailJson(true, r, "删除失败")
|
||||
}
|
||||
err := cms_service.DeleteCmsByIds(ids)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, "删除失败")
|
||||
}
|
||||
response.SusJson(true, r, "删除信息成功")
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"gfast/app/model/admin/sys_dict_type"
|
||||
"gfast/app/service/admin/dict_service"
|
||||
"gfast/app/service/admin/user_service"
|
||||
"gfast/app/service/cache_service"
|
||||
"gfast/library/response"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
@@ -25,11 +26,16 @@ func (c *Dict) List(r *ghttp.Request) {
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
//菜单正常or停用状态
|
||||
statusOptions, err := dict_service.GetDictWithDataByType("sys_normal_disable", "", "")
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
result := g.Map{
|
||||
"currentPage": page,
|
||||
"total": total,
|
||||
"list": list,
|
||||
"searchStatus": map[string]string{"": "所有", "0": "停用", "1": "正常"},
|
||||
"searchStatus": statusOptions,
|
||||
}
|
||||
response.SusJson(true, r, "字典列表", result)
|
||||
}
|
||||
@@ -51,6 +57,8 @@ func (c *Dict) Add(r *ghttp.Request) {
|
||||
g.Log().Error(err.Error())
|
||||
response.FailJson(true, r, "字典类型添加失败")
|
||||
}
|
||||
//清除tag缓存
|
||||
cache_service.New().RemoveByTag(cache_service.AdminSysConfigTag)
|
||||
response.SusJson(true, r, "添加字典成功")
|
||||
}
|
||||
}
|
||||
@@ -71,14 +79,16 @@ func (c *Dict) Edit(r *ghttp.Request) {
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
//清除tag缓存
|
||||
cache_service.New().RemoveByTag(cache_service.AdminSysConfigTag)
|
||||
response.SusJson(true, r, "修改成功")
|
||||
}
|
||||
id := r.GetInt("id")
|
||||
id := r.GetInt("dictId")
|
||||
entity, err := dict_service.GetDictById(id)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, "字典类型添加失败")
|
||||
response.FailJson(true, r, "字典数据获取失败")
|
||||
}
|
||||
response.SusJson(true, r, "ok", g.Map{"dict": entity})
|
||||
response.SusJson(true, r, "ok", entity)
|
||||
}
|
||||
|
||||
//字典数据列表
|
||||
@@ -93,11 +103,18 @@ func (c *Dict) DataList(r *ghttp.Request) {
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
|
||||
//菜单正常or停用状态
|
||||
statusOptions, err := dict_service.GetDictWithDataByType("sys_normal_disable", "", "")
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
|
||||
result := g.Map{
|
||||
"currentPage": page,
|
||||
"total": total,
|
||||
"list": list,
|
||||
"searchStatus": map[string]string{"": "所有", "0": "停用", "1": "正常"},
|
||||
"searchStatus": statusOptions,
|
||||
}
|
||||
response.SusJson(true, r, "ok", result)
|
||||
}
|
||||
@@ -115,15 +132,10 @@ func (c *Dict) DataAdd(r *ghttp.Request) {
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
//清除tag缓存
|
||||
cache_service.New().RemoveByTag(cache_service.AdminSysConfigTag)
|
||||
response.SusJson(true, r, "添加字典数据成功")
|
||||
}
|
||||
dictType := r.GetQueryString("dictType")
|
||||
res := g.Map{
|
||||
"listClassSelector": g.Map{"default": "默认", "primary": "主要", "success": "成功", "info": "信息",
|
||||
"warning": "警告", "danger": "危险"},
|
||||
"dictType": dictType,
|
||||
}
|
||||
response.SusJson(true, r, "ok", res)
|
||||
}
|
||||
|
||||
//修改字典数据
|
||||
@@ -139,21 +151,17 @@ func (c *Dict) DataEdit(r *ghttp.Request) {
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
//清除tag缓存
|
||||
cache_service.New().RemoveByTag(cache_service.AdminSysConfigTag)
|
||||
response.SusJson(true, r, "修改字典数据成功")
|
||||
|
||||
}
|
||||
dictCode := r.GetInt("dictCode")
|
||||
dictData, err := dict_service.GetDictDataById(dictCode)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
res := g.Map{
|
||||
"listClassSelector": g.Map{"default": "默认", "primary": "主要", "success": "成功", "info": "信息",
|
||||
"warning": "警告", "danger": "危险"},
|
||||
"dictType": dictData.DictType,
|
||||
"dictData": dictData,
|
||||
}
|
||||
response.SusJson(true, r, "ok", res)
|
||||
|
||||
response.SusJson(true, r, "ok", dictData)
|
||||
}
|
||||
|
||||
//删除字典
|
||||
@@ -166,12 +174,14 @@ func (c *Dict) Delete(r *ghttp.Request) {
|
||||
if err != nil {
|
||||
response.FailJson(true, r, "删除失败")
|
||||
}
|
||||
//清除tag缓存
|
||||
cache_service.New().RemoveByTag(cache_service.AdminSysConfigTag)
|
||||
response.SusJson(true, r, "删除成功")
|
||||
}
|
||||
|
||||
//删除字典数据
|
||||
func (c *Dict) DataDelete(r *ghttp.Request) {
|
||||
dictCodes := r.GetInts("dictCode")
|
||||
dictCodes := r.GetInts("ids")
|
||||
if len(dictCodes) == 0 {
|
||||
response.FailJson(true, r, "删除失败")
|
||||
}
|
||||
@@ -179,5 +189,40 @@ func (c *Dict) DataDelete(r *ghttp.Request) {
|
||||
if err != nil {
|
||||
response.FailJson(true, r, "删除失败")
|
||||
}
|
||||
//清除tag缓存
|
||||
cache_service.New().RemoveByTag(cache_service.AdminSysConfigTag)
|
||||
response.SusJson(true, r, "删除成功")
|
||||
}
|
||||
|
||||
/**
|
||||
状态
|
||||
*/
|
||||
func (c *Dict) SysNormalDisable(r *ghttp.Request) {
|
||||
//菜单正常or停用状态
|
||||
statusOptions, err := dict_service.GetDictWithDataByType("sys_normal_disable", "", "")
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
response.SusJson(true, r, "", statusOptions)
|
||||
|
||||
}
|
||||
|
||||
func (c *Dict) SysCommonStatus(r *ghttp.Request) {
|
||||
//获取相关选项
|
||||
logStatus, err := dict_service.GetDictWithDataByType("sys_oper_log_status", "", "全部")
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
|
||||
response.SusJson(true, r, "ok", logStatus)
|
||||
}
|
||||
|
||||
// 获取字典选择框列表
|
||||
func (c *Dict) OptionSelect(r *ghttp.Request) {
|
||||
//获取所有字典类型列表
|
||||
list, err := dict_service.GetAllDictType()
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
response.SusJson(true, r, "ok", list)
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package admin
|
||||
|
||||
import (
|
||||
"gfast/app/model/admin/sys_config"
|
||||
"gfast/app/service/admin/dict_service"
|
||||
"gfast/app/service/admin/params_service"
|
||||
"gfast/app/service/admin/user_service"
|
||||
"gfast/app/service/cache_service"
|
||||
@@ -24,11 +25,16 @@ func (c *Params) List(r *ghttp.Request) {
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
//系统内置选项
|
||||
sysOptions, err := dict_service.GetDictWithDataByType("sys_yes_no", "", "")
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
result := g.Map{
|
||||
"currentPage": page,
|
||||
"total": total,
|
||||
"list": list,
|
||||
"searchTypes": map[string]string{"": "所有", "0": "否", "1": "是"},
|
||||
"searchTypes": sysOptions,
|
||||
}
|
||||
response.SusJson(true, r, "字典列表", result)
|
||||
}
|
||||
@@ -80,7 +86,7 @@ func (c *Params) Edit(r *ghttp.Request) {
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
response.SusJson(true, r, "ok", g.Map{"params": params})
|
||||
response.SusJson(true, r, "ok", params)
|
||||
}
|
||||
|
||||
//删除参数
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
package admin
|
||||
|
||||
import (
|
||||
"gfast/app/model/admin/sys_dept"
|
||||
"gfast/app/service/admin/dept_service"
|
||||
"gfast/library/response"
|
||||
"gfast/library/utils"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
//菜单用户组用户管理
|
||||
type Dept struct{}
|
||||
|
||||
func (c *Dept) List(r *ghttp.Request) {
|
||||
|
||||
var searchParams *sys_dept.SearchParams
|
||||
|
||||
if err := r.Parse(&searchParams); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
|
||||
if list, err := dept_service.GetList(searchParams); err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
} else {
|
||||
if list != nil {
|
||||
response.SusJson(true, r, "成功", list)
|
||||
} else {
|
||||
response.SusJson(true, r, "成功", g.Slice{})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
新增
|
||||
*/
|
||||
func (c *Dept) AddDept(r *ghttp.Request) {
|
||||
if r.Method == "POST" {
|
||||
var addParams *sys_dept.AddParams
|
||||
|
||||
if err := r.Parse(&addParams); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
//g.Log().Println(AddParams)
|
||||
if _, err := dept_service.AddDept(addParams); err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
response.SusJson(true, r, "添加成功")
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
编辑
|
||||
*/
|
||||
func (c *Dept) EditDept(r *ghttp.Request) {
|
||||
if r.Method == "POST" {
|
||||
var editParams *sys_dept.EditParams
|
||||
if err := r.Parse(&editParams); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
|
||||
if err := dept_service.EditDept(editParams); err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
response.SusJson(true, r, "编辑成功")
|
||||
|
||||
}
|
||||
|
||||
id := r.GetInt64("id")
|
||||
if id == 0 {
|
||||
response.FailJson(true, r, "参数错误")
|
||||
}
|
||||
if dept, err := dept_service.GetDeptById(id); err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
} else {
|
||||
response.SusJson(true, r, "success", dept)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
查询部门排除节点
|
||||
*/
|
||||
func (c *Dept) Exclude(r *ghttp.Request) {
|
||||
id := r.GetInt64("id")
|
||||
if id == 0 {
|
||||
response.FailJson(true, r, "参数错误")
|
||||
}
|
||||
|
||||
if depts, err := dept_service.Exclude(id); err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
} else {
|
||||
response.SusJson(true, r, "success", depts)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
删除
|
||||
*/
|
||||
func (c *Dept) DelDept(r *ghttp.Request) {
|
||||
id := r.GetInt64("id")
|
||||
if id == 0 {
|
||||
response.FailJson(true, r, "删除失败")
|
||||
}
|
||||
err := dept_service.DelDept(id)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, "删除失败")
|
||||
}
|
||||
response.SusJson(true, r, "删除信息成功")
|
||||
}
|
||||
|
||||
func (c *Dept) TreeSelect(r *ghttp.Request) {
|
||||
//获取正常状态部门数据
|
||||
list, err := dept_service.GetList(&sys_dept.SearchParams{Status: "1"})
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
var dList g.ListStrAny
|
||||
for _, entity := range list {
|
||||
m := g.Map{
|
||||
"id": entity.DeptID,
|
||||
"pid": entity.ParentID,
|
||||
"label": entity.DeptName,
|
||||
}
|
||||
dList = append(dList, m)
|
||||
}
|
||||
dList = utils.PushSonToParent(dList, 0, "pid", "id", "children", "", nil, false)
|
||||
res := g.Map{
|
||||
"depts": dList,
|
||||
}
|
||||
response.SusJson(true, r, "ok", res)
|
||||
}
|
||||
|
||||
//获取角色部门
|
||||
func (c *Dept) RoleDeptTreeSelect(r *ghttp.Request) {
|
||||
id := r.GetInt64("roleId")
|
||||
if id == 0 {
|
||||
response.FailJson(true, r, "参数错误")
|
||||
}
|
||||
//获取正常状态部门数据
|
||||
list, err := dept_service.GetList(&sys_dept.SearchParams{Status: "1"})
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
var dList g.ListStrAny
|
||||
for _, entity := range list {
|
||||
m := g.Map{
|
||||
"id": entity.DeptID,
|
||||
"pid": entity.ParentID,
|
||||
"label": entity.DeptName,
|
||||
}
|
||||
dList = append(dList, m)
|
||||
}
|
||||
//获取关联的角色数据权限
|
||||
checkedKeys, err := dept_service.GetRoleDepts(id)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
dList = utils.PushSonToParent(dList)
|
||||
res := g.Map{
|
||||
"depts": dList,
|
||||
"checkedKeys": checkedKeys,
|
||||
}
|
||||
response.SusJson(true, r, "ok", res)
|
||||
}
|
||||
@@ -0,0 +1,189 @@
|
||||
package admin
|
||||
|
||||
import (
|
||||
"gfast/app/model/admin/gen_table"
|
||||
"gfast/app/service/admin/gen_service"
|
||||
"gfast/app/service/admin/user_service"
|
||||
"gfast/library/response"
|
||||
"github.com/gogf/gf/encoding/gjson"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/text/gstr"
|
||||
"github.com/gogf/gf/util/gconv"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Gen struct{}
|
||||
|
||||
//查询数据库列表
|
||||
func (c *Gen) DataList(r *ghttp.Request) {
|
||||
var req *gen_table.SelectPageReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
|
||||
total, list, err := gen_service.SelectDbTableList(req)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
response.SusJson(true, r, "ok", g.Map{
|
||||
"total": total,
|
||||
"list": list,
|
||||
})
|
||||
}
|
||||
|
||||
//表列表
|
||||
func (c *Gen) TableList(r *ghttp.Request) {
|
||||
var req *gen_table.SelectPageReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
total, list, err := gen_service.SelectListByPage(req)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
response.SusJson(true, r, "ok", g.Map{
|
||||
"total": total,
|
||||
"list": list,
|
||||
})
|
||||
}
|
||||
|
||||
//导入表结构操作
|
||||
func (c *Gen) ImportTableSave(r *ghttp.Request) {
|
||||
tables := r.GetString("tables")
|
||||
if tables == "" {
|
||||
response.FailJson(true, r, "请选择要导入的表格")
|
||||
}
|
||||
user := user_service.GetLoginAdminInfo(r)
|
||||
operName := user.UserName
|
||||
tableArr := strings.Split(tables, ",")
|
||||
tableList, err := gen_service.SelectDbTableListByNames(tableArr)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
if tableList == nil {
|
||||
response.FailJson(true, r, "表信息不存在")
|
||||
}
|
||||
err = gen_service.ImportGenTable(tableList, operName)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
response.SusJson(true, r, "导入数据表成功")
|
||||
}
|
||||
|
||||
//根据表格ID获取表格字段列表数据
|
||||
func (c *Gen) ColumnList(r *ghttp.Request) {
|
||||
tableId := r.GetInt64("tableId")
|
||||
if tableId == 0 {
|
||||
response.FailJson(true, r, "参数错误")
|
||||
}
|
||||
list, err := gen_service.SelectGenTableColumnListByTableId(tableId)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
var tableInfo *gen_table.Entity
|
||||
var tableMap g.Map
|
||||
tableInfo, err = gen_service.GetTableInfoByTableId(tableId)
|
||||
tableMap = gconv.Map(tableInfo)
|
||||
//如果是树表则设置树表配置
|
||||
if tableInfo != nil && tableInfo.TplCategory == "tree" {
|
||||
options := gjson.New(tableInfo.Options)
|
||||
tableMap["tree_code"] = options.Get("tree_code")
|
||||
tableMap["tree_parent_code"] = options.Get("tree_parent_code")
|
||||
tableMap["tree_name"] = options.Get("tree_name")
|
||||
}
|
||||
|
||||
res := g.Map{
|
||||
"rows": list,
|
||||
"info": tableMap,
|
||||
}
|
||||
response.SusJson(true, r, "ok", res)
|
||||
}
|
||||
|
||||
//编辑表格信息
|
||||
func (c *Gen) EditSave(r *ghttp.Request) {
|
||||
var req *gen_table.EditReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
userInfo := user_service.GetLoginAdminInfo(r)
|
||||
req.UserName = userInfo.UserName
|
||||
err := gen_service.SaveEdit(req)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
response.SusJson(true, r, "设置成功")
|
||||
}
|
||||
|
||||
//删除表格数据
|
||||
func (c *Gen) Delete(r *ghttp.Request) {
|
||||
ids := r.GetInts("ids")
|
||||
if len(ids) == 0 {
|
||||
response.FailJson(true, r, "参数错误")
|
||||
}
|
||||
err := gen_service.Delete(ids)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
response.SusJson(true, r, "删除成功")
|
||||
}
|
||||
|
||||
//代码生成预览
|
||||
func (c *Gen) Preview(r *ghttp.Request) {
|
||||
tableId := r.GetInt64("tableId")
|
||||
if tableId == 0 {
|
||||
response.FailJson(true, r, "参数错误")
|
||||
}
|
||||
entity, err := gen_service.SelectRecordById(tableId)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
if entity == nil {
|
||||
response.FailJson(true, r, "表格数据不存在")
|
||||
}
|
||||
gen_service.SetPkColumn(entity, entity.Columns)
|
||||
|
||||
controllerKey := "vm/go/" + entity.BusinessName + "_controller.go.vm"
|
||||
controllerValue := ""
|
||||
serviceKey := "vm/go/" + entity.BusinessName + "_service.go.vm"
|
||||
serviceValue := ""
|
||||
extendKey := "vm/go/" + entity.BusinessName + "_extend.go.vm"
|
||||
extendValue := ""
|
||||
apiJsKey := "vm/html/" + entity.BusinessName + "_api.js.vm"
|
||||
apiJsValue := ""
|
||||
vueKey := "vm/html/" + entity.BusinessName + "_vue.js.vm"
|
||||
vueValue := ""
|
||||
|
||||
g.View().BindFuncMap(g.Map{
|
||||
"UcFirst": func(str string) string {
|
||||
return gstr.UcFirst(str)
|
||||
},
|
||||
})
|
||||
if tmpController, err := r.Response.ParseTpl("vm/go/controller.template", g.Map{"table": entity}); err == nil {
|
||||
controllerValue = tmpController
|
||||
}
|
||||
if tmpService, err := r.Response.ParseTpl("vm/go/service.template", g.Map{"table": entity}); err == nil {
|
||||
serviceValue = tmpService
|
||||
}
|
||||
if tmpExtend, err := r.Response.ParseTpl("vm/go/extend.template", g.Map{"table": entity}); err == nil {
|
||||
extendValue = tmpExtend
|
||||
}
|
||||
if tmpExtend, err := r.Response.ParseTpl("vm/html/js.template", g.Map{"table": entity}); err == nil {
|
||||
apiJsValue = tmpExtend
|
||||
}
|
||||
if tmpExtend, err := r.Response.ParseTpl("vm/html/vue.template", g.Map{"table": entity}); err == nil {
|
||||
vueValue = tmpExtend
|
||||
}
|
||||
|
||||
response.SusJson(true, r, "ok", g.Map{
|
||||
extendKey: extendValue,
|
||||
serviceKey: serviceValue,
|
||||
controllerKey: controllerValue,
|
||||
apiJsKey: apiJsValue,
|
||||
vueKey: vueValue,
|
||||
})
|
||||
}
|
||||
@@ -8,22 +8,65 @@ import (
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/util/gconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Index struct{}
|
||||
|
||||
//后台首页接口数据
|
||||
func (c *Index) Index(r *ghttp.Request) {
|
||||
//获取登录用户信息
|
||||
func (c *Index) GetInfo(r *ghttp.Request) {
|
||||
//获取用户信息
|
||||
userEntity := user_service.GetLoginAdminInfo(r)
|
||||
userEntity, err := user_service.GetCurrentUser(r)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取当前登录用户信息失败")
|
||||
}
|
||||
userInfo := gconv.Map(userEntity)
|
||||
//菜单列表
|
||||
var menuList g.List
|
||||
isSuperAdmin := false
|
||||
rolesList := make([]string, 0, 10)
|
||||
if userInfo != nil {
|
||||
userId := userEntity.Id
|
||||
delete(userInfo, "user_password")
|
||||
userInfo["roles"] = make([]string, 0)
|
||||
|
||||
//获取用户角色信息
|
||||
allRoles, err := auth_service.GetRoleList()
|
||||
if err == nil {
|
||||
roles, err := user_service.GetAdminRole(userId, allRoles)
|
||||
if err == nil {
|
||||
name := make([]string, len(roles))
|
||||
roleIds := make([]int, len(roles))
|
||||
for k, v := range roles {
|
||||
name[k] = v.Name
|
||||
roleIds[k] = v.Id
|
||||
}
|
||||
userInfo["roles"] = roles
|
||||
rolesList = name
|
||||
} else {
|
||||
g.Log().Error(err)
|
||||
}
|
||||
} else {
|
||||
g.Log().Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
result := g.Map{
|
||||
"user": userInfo,
|
||||
"roles": rolesList,
|
||||
"permissions": nil,
|
||||
}
|
||||
|
||||
response.SusJson(true, r, "ok", result)
|
||||
}
|
||||
|
||||
//获取后台菜单
|
||||
func (c *Index) GetRouters(r *ghttp.Request) {
|
||||
//获取用户信息
|
||||
userEntity := user_service.GetLoginAdminInfo(r)
|
||||
//菜单列表
|
||||
var menuList g.List
|
||||
isSuperAdmin := false
|
||||
if userEntity != nil {
|
||||
userId := userEntity.Id
|
||||
|
||||
//获取无需验证权限的用户id
|
||||
for _, v := range service.NotCheckAuthAdminIds {
|
||||
if v == userId {
|
||||
@@ -43,7 +86,6 @@ func (c *Index) Index(r *ghttp.Request) {
|
||||
name[k] = v.Name
|
||||
roleIds[k] = v.Id
|
||||
}
|
||||
userInfo["roles"] = strings.Join(name, ",")
|
||||
//获取菜单信息
|
||||
if isSuperAdmin {
|
||||
//超管获取所有菜单
|
||||
@@ -56,17 +98,13 @@ func (c *Index) Index(r *ghttp.Request) {
|
||||
}
|
||||
} else {
|
||||
g.Log().Error(err)
|
||||
userInfo["roles"] = ""
|
||||
}
|
||||
} else {
|
||||
g.Log().Error(err)
|
||||
userInfo["roles"] = ""
|
||||
}
|
||||
}
|
||||
|
||||
result := g.Map{
|
||||
"userInfo": userInfo,
|
||||
"menuList": menuList,
|
||||
if menuList == nil {
|
||||
menuList = g.List{}
|
||||
}
|
||||
response.SusJson(true, r, "ok", result)
|
||||
response.SusJson(true, r, "ok", menuList)
|
||||
}
|
||||
|
||||
@@ -122,9 +122,19 @@ func (c *MonitorJob) Edit(r *ghttp.Request) {
|
||||
response.SusJson(true, r, "添加任务", res)
|
||||
}
|
||||
|
||||
//详情
|
||||
func (c *MonitorJob) Details(r *ghttp.Request) {
|
||||
id := r.GetInt64("id")
|
||||
job, err := monitor_service.GetJobInfoById(id)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
response.SusJson(true, r, "success", job)
|
||||
}
|
||||
|
||||
//删除计划任务
|
||||
func (c *MonitorJob) Delete(r *ghttp.Request) {
|
||||
ids := r.GetInts("ids")
|
||||
ids := r.GetInts("id")
|
||||
err := monitor_service.DeleteJobByIds(ids)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
package admin
|
||||
|
||||
import (
|
||||
"gfast/app/model/admin/sys_post"
|
||||
"gfast/app/service/admin/post_service"
|
||||
"gfast/library/response"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
type Post struct{}
|
||||
|
||||
func (c *Post) List(r *ghttp.Request) {
|
||||
var req *sys_post.SearchParams
|
||||
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
|
||||
total, page, list, err := post_service.List(req)
|
||||
|
||||
if err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
|
||||
result := g.Map{
|
||||
"total": total,
|
||||
"list": list,
|
||||
"page": page,
|
||||
}
|
||||
|
||||
response.SusJson(true, r, "成功", result)
|
||||
}
|
||||
|
||||
func (c *Post) Add(r *ghttp.Request) {
|
||||
if r.Method == "POST" {
|
||||
|
||||
var addParams *sys_post.AddParams
|
||||
|
||||
if err := r.Parse(&addParams); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
|
||||
if _, err := post_service.Add(addParams); err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
|
||||
response.SusJson(true, r, "添加成功")
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Post) Edit(r *ghttp.Request) {
|
||||
if r.Method == "POST" {
|
||||
var editParams *sys_post.EditParams
|
||||
|
||||
if err := r.Parse(&editParams); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
|
||||
if _, err := post_service.Edit(editParams); err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
|
||||
response.SusJson(true, r, "修改成功")
|
||||
}
|
||||
|
||||
id := r.GetInt64("id")
|
||||
if id == 0 {
|
||||
response.FailJson(true, r, "id必须")
|
||||
}
|
||||
|
||||
if post, err := post_service.GetOneById(id); err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
} else {
|
||||
response.SusJson(true, r, "success", post)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (c *Post) Delete(r *ghttp.Request) {
|
||||
ids := r.GetInts("ids")
|
||||
if len(ids) == 0 {
|
||||
response.FailJson(true, r, "删除失败")
|
||||
}
|
||||
err := post_service.Delete(ids)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, "删除失败")
|
||||
}
|
||||
response.SusJson(true, r, "删除信息成功")
|
||||
}
|
||||
@@ -5,10 +5,31 @@ import (
|
||||
"gfast/library/response"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/text/gstr"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
type Upload struct{}
|
||||
|
||||
//CkEditor编辑器上传附件
|
||||
func (c *Upload) CkEditorUp(r *ghttp.Request) {
|
||||
upFile := r.GetUploadFile("upload")
|
||||
fType := gstr.ToLower(r.GetString("type"))
|
||||
var info *upload_service.FileInfo
|
||||
var err error
|
||||
if fType == "images" {
|
||||
info, err = upload_service.UpImg(upFile)
|
||||
} else if fType == "files" {
|
||||
info, err = upload_service.UpFile(upFile)
|
||||
}
|
||||
if err != nil {
|
||||
r.Response.WriteJson(g.Map{"error": g.Map{"message": "上传失败," + err.Error(), "number": 105}})
|
||||
} else {
|
||||
parseInfo, _ := url.Parse(r.GetUrl())
|
||||
r.Response.WriteJson(g.Map{"fileName": info.FileName, "uploaded": 1, "url": parseInfo.Scheme + "://" + parseInfo.Host + "/" + info.FileUrl})
|
||||
}
|
||||
}
|
||||
|
||||
//单图片上传
|
||||
func (c *Upload) UpImg(r *ghttp.Request) {
|
||||
upFile := r.GetUploadFile("file")
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
package admin
|
||||
|
||||
import (
|
||||
"gfast/app/model/admin/user"
|
||||
"gfast/app/service/admin/upload_service"
|
||||
"gfast/app/service/admin/user_service"
|
||||
"gfast/library/response"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
type User struct{}
|
||||
|
||||
//头像上传上传
|
||||
func (c *User) Avatar(r *ghttp.Request) {
|
||||
upFile := r.GetUploadFile("avatarfile")
|
||||
info, err := upload_service.UpImg(upFile)
|
||||
if err != nil {
|
||||
response.FailJson(true, r, "上传失败,"+err.Error())
|
||||
}
|
||||
res := g.Map{
|
||||
"fileInfo": info,
|
||||
}
|
||||
id := user_service.GetLoginID(r)
|
||||
if _, err := user.Model.Where("id", id).Data(g.Map{
|
||||
"avatar": info.FileUrl,
|
||||
}).Update(); err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
response.SusJson(true, r, "上传成功", res)
|
||||
}
|
||||
|
||||
/**
|
||||
获取当前登录用户详情
|
||||
*/
|
||||
func (c *User) Profile(r *ghttp.Request) {
|
||||
//获取用户信息
|
||||
userInfo, err := user_service.GetCurrentUserInfo(r)
|
||||
|
||||
if err != nil {
|
||||
g.Log().Println(err.Error())
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
|
||||
delete(userInfo, "user_password")
|
||||
response.SusJson(true, r, "ok", userInfo)
|
||||
}
|
||||
|
||||
/**
|
||||
修改用户信息
|
||||
*/
|
||||
func (c *User) Edit(r *ghttp.Request) {
|
||||
|
||||
if r.Method == "POST" {
|
||||
|
||||
var req *user_service.EditParams
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
|
||||
if _, err := user_service.Edit(req); err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
}
|
||||
response.SusJson(true, r, "修改成功")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
修改密码
|
||||
*/
|
||||
func (c *User) UpdatePwd(r *ghttp.Request) {
|
||||
if r.Method == "POST" {
|
||||
var req *user_service.UpdatePwdReq
|
||||
if err := r.Parse(&req); err != nil {
|
||||
response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
||||
}
|
||||
if err := user_service.UpdatePwd(r, req); err != nil {
|
||||
response.FailJson(true, r, err.Error())
|
||||
} else {
|
||||
response.SusJson(true, r, "修改成功")
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package front
|
||||
|
||||
import (
|
||||
"gfast/library/response"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
)
|
||||
|
||||
type Index struct{}
|
||||
|
||||
//前台首页
|
||||
func (c *Index) Index(r *ghttp.Request) {
|
||||
response.SusJson(true, r, "登录成功")
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package auth_rule
|
||||
import (
|
||||
"gfast/app/service/cache_service"
|
||||
"gfast/library/utils"
|
||||
"github.com/gogf/gf/errors/gerror"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/os/gtime"
|
||||
"github.com/gogf/gf/util/gconv"
|
||||
@@ -10,15 +11,18 @@ import (
|
||||
|
||||
//菜单对象
|
||||
type MenuReq struct {
|
||||
IsMenu int `p:"ismenu" c:"ismenu" v:"min:0|max:1#菜单类型最小值为:min|菜单类型最大值为:max"`
|
||||
Pid int `p:"pid" c:"pid" v:"min:0"`
|
||||
Name string `p:"name" c:"name" v:"required#请填写规则名称"`
|
||||
Title string `p:"title" c:"title" v:"required|length:1,100#请填写标题|标题长度在:min到:max位"`
|
||||
Icon string `p:"icon" c:"icon"`
|
||||
Weigh int `p:"weigh" c:"weigh"`
|
||||
Condition string `p:"condition" c:"condition"`
|
||||
Remark string `p:"remark" c:"remark"`
|
||||
Status int `p:"status" c:"status"`
|
||||
MenuType uint `p:"menuType" v:"min:0|max:2#菜单类型最小值为:min|菜单类型最大值为:max"`
|
||||
Pid uint `p:"parentId" v:"min:0"`
|
||||
Name string `p:"component" v:"required#请填写规则名称"`
|
||||
Title string `p:"menuName" v:"required|length:1,100#请填写标题|标题长度在:min到:max位"`
|
||||
Icon string `p:"icon"`
|
||||
Weigh int `p:"orderNum" `
|
||||
Condition string `p:"condition" `
|
||||
Remark string `p:"remark" `
|
||||
Status uint `p:"status" `
|
||||
AlwaysShow uint `p:"visible"`
|
||||
Path string `p:"path"`
|
||||
IsFrame uint `p:"is_frame"`
|
||||
}
|
||||
|
||||
//获取所有菜单
|
||||
@@ -54,26 +58,73 @@ func CheckMenuNameUnique(name string, id int) bool {
|
||||
return c == 0
|
||||
}
|
||||
|
||||
//检查菜单路由地址是否已经存在
|
||||
func CheckMenuPathUnique(path string, id int) bool {
|
||||
model := Model.Where("path=?", path).Where("menu_type<>?", 2)
|
||||
if id != 0 {
|
||||
model = model.And("id!=?", id)
|
||||
}
|
||||
c, err := model.Count()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return false
|
||||
}
|
||||
return c == 0
|
||||
}
|
||||
|
||||
// 添加菜单操作
|
||||
func Add(req *MenuReq) (err error, insertId int64) {
|
||||
menuMap := gconv.Map(req)
|
||||
if req == nil {
|
||||
err = gerror.New("参数错误")
|
||||
return
|
||||
}
|
||||
now := gtime.Timestamp()
|
||||
menuMap["createtime"] = now
|
||||
menuMap["updatetime"] = now
|
||||
res, e := Model.Insert(menuMap)
|
||||
entity := new(Entity)
|
||||
entity.Title = req.Title
|
||||
entity.Status = req.Status
|
||||
entity.MenuType = req.MenuType
|
||||
entity.Path = req.Path
|
||||
entity.AlwaysShow = req.AlwaysShow
|
||||
entity.Icon = req.Icon
|
||||
entity.Name = req.Name
|
||||
entity.IsFrame = req.IsFrame
|
||||
entity.Pid = req.Pid
|
||||
entity.Createtime = gconv.Uint(now)
|
||||
entity.Updatetime = gconv.Uint(now)
|
||||
|
||||
res, e := entity.Insert()
|
||||
err = e
|
||||
insertId, _ = res.LastInsertId()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
insertId, err = res.LastInsertId()
|
||||
return
|
||||
}
|
||||
|
||||
//修改菜单操作
|
||||
func Edit(req *MenuReq, id int) (err error, rows int64) {
|
||||
menuMap := gconv.Map(req)
|
||||
var entity *Entity
|
||||
entity, err = Model.FindOne(id)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
now := gtime.Timestamp()
|
||||
menuMap["updatetime"] = now
|
||||
res, e := Model.Where("id=?", id).Update(menuMap)
|
||||
entity.Updatetime = gconv.Uint(now)
|
||||
entity.Title = req.Title
|
||||
entity.Status = req.Status
|
||||
entity.MenuType = req.MenuType
|
||||
entity.Path = req.Path
|
||||
entity.AlwaysShow = req.AlwaysShow
|
||||
entity.Icon = req.Icon
|
||||
entity.Name = req.Name
|
||||
entity.IsFrame = req.IsFrame
|
||||
entity.Pid = req.Pid
|
||||
res, e := entity.Update()
|
||||
err = e
|
||||
rows, _ = res.RowsAffected()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
rows, err = res.RowsAffected()
|
||||
return
|
||||
}
|
||||
|
||||
@@ -95,3 +146,8 @@ func DeleteByIds(ids []int) (err error) {
|
||||
_, err = Model.Where("id in (?)", ids).Delete()
|
||||
return
|
||||
}
|
||||
|
||||
type ReqSearch struct {
|
||||
Status string `p:"status" `
|
||||
Title string `p:"menuName" `
|
||||
}
|
||||
|
||||
@@ -11,19 +11,21 @@ import (
|
||||
|
||||
// Entity is the golang structure for table auth_rule.
|
||||
type Entity struct {
|
||||
Id uint `orm:"id,primary" json:"id"` //
|
||||
Type string `orm:"type" json:"type"` // menu为菜单,file为权限节点
|
||||
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"` // 备注
|
||||
Ismenu uint `orm:"ismenu" json:"ismenu"` // 是否为菜单
|
||||
Createtime uint `orm:"createtime" json:"createtime"` // 创建时间
|
||||
Updatetime uint `orm:"updatetime" json:"updatetime"` // 更新时间
|
||||
Weigh int `orm:"weigh" json:"weigh"` // 权重
|
||||
Status uint `orm:"status" json:"status"` // 状态
|
||||
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"` //路由地址
|
||||
IsFrame uint `orm:"is_frame" json:"isFrame"` //是否外链 1是 0否
|
||||
}
|
||||
|
||||
// OmitEmpty sets OPTION_OMITEMPTY option for the model, which automatically filers
|
||||
|
||||
@@ -2,6 +2,7 @@ package cms_category
|
||||
|
||||
import (
|
||||
"gfast/app/service/cache_service"
|
||||
"github.com/gogf/gf/container/gset"
|
||||
"github.com/gogf/gf/errors/gerror"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/text/gstr"
|
||||
@@ -18,7 +19,8 @@ const (
|
||||
|
||||
//列表搜索参数
|
||||
type ReqSearchList struct {
|
||||
Name string `p:"name"`
|
||||
Name string `p:"name"`
|
||||
Status string `p:"status"`
|
||||
}
|
||||
|
||||
//添加请求参数
|
||||
@@ -70,12 +72,20 @@ func AddSave(req *ReqAdd) (id int64, err error) {
|
||||
entity.CateType = req.CateType
|
||||
entity.Status = req.Status
|
||||
entity.Name = req.Name
|
||||
entity.Alias = req.Alias
|
||||
entity.Description = req.Description
|
||||
entity.SeoTitle = req.InputSeoTitle
|
||||
entity.SeoKeywords = req.InputSeoKeywords
|
||||
entity.SeoDescription = req.InputSeoDescription
|
||||
entity.CateAddress = req.CateAddress
|
||||
entity.CateContent = req.CateContent
|
||||
moreFields := g.Map{}
|
||||
if req.Thumbnail != "" {
|
||||
moreFields["thumb"] = req.Thumbnail
|
||||
}
|
||||
if len(moreFields) != 0 {
|
||||
entity.More = gconv.String(moreFields)
|
||||
}
|
||||
res, err := entity.Insert()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
@@ -121,12 +131,20 @@ func EditSave(req *ReqEdit) (id int64, err error) {
|
||||
entity.CateType = req.CateType
|
||||
entity.Status = req.Status
|
||||
entity.Name = req.Name
|
||||
entity.Alias = req.Alias
|
||||
entity.Description = req.Description
|
||||
entity.SeoTitle = req.InputSeoTitle
|
||||
entity.SeoKeywords = req.InputSeoKeywords
|
||||
entity.SeoDescription = req.InputSeoDescription
|
||||
entity.CateAddress = req.CateAddress
|
||||
entity.CateContent = req.CateContent
|
||||
moreFields := g.Map{}
|
||||
if req.Thumbnail != "" {
|
||||
moreFields["thumb"] = req.Thumbnail
|
||||
}
|
||||
if len(moreFields) != 0 {
|
||||
entity.More = gconv.String(moreFields)
|
||||
}
|
||||
res, err := entity.Update()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
@@ -146,12 +164,19 @@ func EditSave(req *ReqEdit) (id int64, err error) {
|
||||
func GetListSearch(req *ReqSearchList) (menus []*Entity, err error) {
|
||||
menus, err = GetList()
|
||||
if req != nil {
|
||||
filterKey := gset.New(false)
|
||||
for key, entity := range menus {
|
||||
if req.Name != "" && !gstr.Contains(entity.Name, req.Name) {
|
||||
filterKey.Add(key)
|
||||
}
|
||||
if req.Status != "" && gconv.Uint(req.Status) != entity.Status {
|
||||
filterKey.Add(key)
|
||||
}
|
||||
}
|
||||
searchMenus := make([]*Entity, 0, len(menus))
|
||||
if req.Name != "" {
|
||||
for _, entity := range menus {
|
||||
if gstr.Contains(entity.Name, req.Name) {
|
||||
searchMenus = append(searchMenus, entity)
|
||||
}
|
||||
for key, entity := range menus {
|
||||
if !filterKey.Contains(key) {
|
||||
searchMenus = append(searchMenus, entity)
|
||||
}
|
||||
}
|
||||
menus = searchMenus
|
||||
|
||||
@@ -17,6 +17,7 @@ type Entity struct {
|
||||
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"` // 分类别名
|
||||
Description string `orm:"description" json:"description"` // 分类描述
|
||||
SeoTitle string `orm:"seo_title" json:"seo_title"` //
|
||||
SeoKeywords string `orm:"seo_keywords" json:"seo_keywords"` //
|
||||
|
||||
@@ -20,18 +20,19 @@ import (
|
||||
|
||||
//添加文章参数
|
||||
type ReqAddParams struct {
|
||||
NewsStatus uint `p:"status" v:"in:0,1#状态只能为0或1"` // 状态;1:已发布;0:未发布;
|
||||
IsTop uint `p:"IsTop" v:"in:0,1#置顶只能为0或1"` // 是否置顶;1:置顶;0:不置顶
|
||||
Recommended uint `p:"recommended" v:"in:0,1#推荐只能为0或1"` // 是否推荐;1:推荐;0:不推荐
|
||||
PublishedTime string `p:"published_time"` // 发布时间
|
||||
NewsTitle string `p:"title" v:"required#标题不能为空"` // post标题
|
||||
NewsKeywords string `p:"keywords"` // seo keywords
|
||||
NewsExcerpt string `p:"excerpt"` // post摘要
|
||||
NewsSource string `p:"source" ` // 转载文章的来源
|
||||
NewsContent string `p:"content" v:"required#文章内容不能为空"` // 文章内容
|
||||
Thumbnail string `p:"thumbnail" ` // 缩略图
|
||||
IsJump uint `p:"IsJump" v:"in:0,1#跳转类型只能为0或1"` // 是否跳转地址
|
||||
JumpUrl string `p:"JumpUrl" ` // 跳转地址
|
||||
NewsStatus uint `p:"status" v:"in:0,1#状态只能为0或1"` // 状态;1:已发布;0:未发布;
|
||||
//IsTop uint `p:"IsTop" v:"in:0,1#置顶只能为0或1"` // 是否置顶;1:置顶;0:不置顶
|
||||
//Recommended uint `p:"recommended" v:"in:0,1#推荐只能为0或1"` // 是否推荐;1:推荐;0:不推荐
|
||||
Attr []int `p:attr` //文章标记 置顶 推荐
|
||||
PublishedTime string `p:"published_time"` // 发布时间
|
||||
NewsTitle string `p:"title" v:"required#标题不能为空"` // post标题
|
||||
NewsKeywords string `p:"keywords"` // seo keywords
|
||||
NewsExcerpt string `p:"excerpt"` // post摘要
|
||||
NewsSource string `p:"source" ` // 转载文章的来源
|
||||
NewsContent string `p:"content" v:"required-if:IsJump,0#文章内容不能为空"` // 文章内容
|
||||
Thumbnail string `p:"thumbnail" ` // 缩略图
|
||||
IsJump uint `p:"IsJump" v:"in:0,1#跳转类型只能为0或1"` // 是否跳转地址
|
||||
JumpUrl string `p:"JumpUrl" v:"required-if:IsJump,1|url#跳转地址不能为空|跳转地址格式不正确"` // 跳转地址
|
||||
}
|
||||
|
||||
//文章搜索参数
|
||||
@@ -61,22 +62,29 @@ func AddNews(req *ReqAddParams, cateIds []int, userId int) (insId int64, err err
|
||||
err = gerror.New("添加失败")
|
||||
return
|
||||
}
|
||||
nowTime := gconv.Uint(gtime.Timestamp())
|
||||
entity := &Entity{
|
||||
UserId: gconv.Uint64(userId),
|
||||
NewsStatus: req.NewsStatus,
|
||||
IsTop: req.IsTop,
|
||||
Recommended: req.Recommended,
|
||||
CreateTime: gconv.Uint(gtime.Timestamp()),
|
||||
CreateTime: nowTime,
|
||||
UpdateTime: nowTime,
|
||||
PublishedTime: gconv.Uint(utils.StrToTimestamp(req.PublishedTime)),
|
||||
NewsTitle: req.NewsTitle,
|
||||
NewsKeywords: req.NewsKeywords,
|
||||
NewsExcerpt: req.NewsExcerpt,
|
||||
NewsSource: req.NewsExcerpt,
|
||||
NewsSource: req.NewsSource,
|
||||
NewsContent: req.NewsContent,
|
||||
Thumbnail: req.Thumbnail,
|
||||
IsJump: req.IsJump,
|
||||
JumpUrl: req.JumpUrl,
|
||||
}
|
||||
for _, v := range req.Attr {
|
||||
if v == 1 {
|
||||
entity.IsTop = 1
|
||||
} else if v == 2 {
|
||||
entity.Recommended = 1
|
||||
}
|
||||
}
|
||||
res, e := entity.Save()
|
||||
if e != nil {
|
||||
g.Log().Error(e)
|
||||
@@ -129,18 +137,23 @@ func EditNews(req *ReqEditParams, cateIds []int) (err error) {
|
||||
return
|
||||
}
|
||||
entity.NewsStatus = req.NewsStatus
|
||||
entity.IsTop = req.IsTop
|
||||
entity.Recommended = req.Recommended
|
||||
entity.UpdateTime = gconv.Uint(gtime.Timestamp())
|
||||
entity.PublishedTime = gconv.Uint(utils.StrToTimestamp(req.PublishedTime))
|
||||
entity.NewsTitle = req.NewsTitle
|
||||
entity.NewsKeywords = req.NewsKeywords
|
||||
entity.NewsExcerpt = req.NewsExcerpt
|
||||
entity.NewsSource = req.NewsExcerpt
|
||||
entity.NewsSource = req.NewsSource
|
||||
entity.NewsContent = req.NewsContent
|
||||
entity.Thumbnail = req.Thumbnail
|
||||
entity.IsJump = req.IsJump
|
||||
entity.JumpUrl = req.JumpUrl
|
||||
for _, v := range req.Attr {
|
||||
if v == 1 {
|
||||
entity.IsTop = 1
|
||||
} else if v == 2 {
|
||||
entity.Recommended = 1
|
||||
}
|
||||
}
|
||||
_, err = entity.Update()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
|
||||
@@ -0,0 +1,191 @@
|
||||
// ============================================================================
|
||||
// This is auto-generated by gf cli tool only once. Fill this file as you wish.
|
||||
// ============================================================================
|
||||
|
||||
package gen_table
|
||||
|
||||
import (
|
||||
"gfast/app/model/admin/gen_table_column"
|
||||
"gfast/library/service"
|
||||
"github.com/gogf/gf/database/gdb"
|
||||
"github.com/gogf/gf/errors/gerror"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/os/gtime"
|
||||
"github.com/gogf/gf/text/gstr"
|
||||
"github.com/gogf/gf/util/gconv"
|
||||
)
|
||||
|
||||
//分页请求参数
|
||||
type SelectPageReq struct {
|
||||
TableName string `p:"tableName"` //表名称
|
||||
TableComment string `p:"tableComment"` //表描述
|
||||
BeginTime string `p:"beginTime"` //开始时间
|
||||
EndTime string `p:"endTime"` //结束时间
|
||||
PageNum int `p:"pageNum"` //当前页码
|
||||
PageSize int `p:"pageSize"` //每页数
|
||||
}
|
||||
|
||||
//实体扩展
|
||||
type EntityExtend struct {
|
||||
TableId int64 `orm:"table_id,primary" json:"table_id"` // 编号
|
||||
TableName string `orm:"table_name" json:"table_name"` // 表名称
|
||||
TableComment string `orm:"table_comment" json:"table_comment"` // 表描述
|
||||
ClassName string `orm:"class_name" json:"class_name"` // 实体类名称
|
||||
TplCategory string `orm:"tpl_category" json:"tpl_category"` // 使用的模板(crud单表操作 tree树表操作)
|
||||
PackageName string `orm:"package_name" json:"package_name"` // 生成包路径
|
||||
ModuleName string `orm:"module_name" json:"module_name"` // 生成模块名
|
||||
BusinessName string `orm:"business_name" json:"business_name"` // 生成业务名
|
||||
FunctionName string `orm:"function_name" json:"function_name"` // 生成功能名
|
||||
FunctionAuthor string `orm:"function_author" json:"function_author"` // 生成功能作者
|
||||
Options string `orm:"options" json:"options"` // 其它生成选项
|
||||
CreateBy string `orm:"create_by" json:"create_by"` // 创建者
|
||||
CreateTime *gtime.Time `orm:"create_time" json:"create_time"` // 创建时间
|
||||
UpdateBy string `orm:"update_by" json:"update_by"` // 更新者
|
||||
UpdateTime *gtime.Time `orm:"update_time" json:"update_time"` // 更新时间
|
||||
Remark string `orm:"remark" json:"remark"` // 备注
|
||||
TreeCode string `json:"tree_code"` // 树编码字段
|
||||
TreeParentCode string `json:"tree_parent_code"` // 树父编码字段
|
||||
TreeName string `json:"tree_name"` // 树名称字段
|
||||
Columns []*gen_table_column.Entity `json:"columns"` // 表列信息
|
||||
PkColumn *gen_table_column.Entity `json:"pkColumn"` // 表列信息
|
||||
}
|
||||
|
||||
//查询据库列表
|
||||
func SelectDbTableList(param *SelectPageReq) (total int, list []*Entity, err error) {
|
||||
db := g.DB()
|
||||
sql := " from information_schema.tables where table_schema = (select database())" +
|
||||
" and table_name NOT LIKE 'qrtz_%' AND table_name NOT LIKE 'gen_%' and table_name NOT IN (select table_name from gen_table) "
|
||||
if param != nil {
|
||||
if param.TableName != "" {
|
||||
sql += gdb.FormatSqlWithArgs(" and lower(table_name) like lower(?)", []interface{}{"%" + param.TableName + "%"})
|
||||
}
|
||||
|
||||
if param.TableComment != "" {
|
||||
sql += gdb.FormatSqlWithArgs(" and lower(table_comment) like lower(?)", []interface{}{"%" + param.TableComment + "%"})
|
||||
}
|
||||
|
||||
if param.BeginTime != "" {
|
||||
sql += gdb.FormatSqlWithArgs(" and date_format(create_time,'%y%m%d') >= date_format(?,'%y%m%d') ", []interface{}{param.BeginTime})
|
||||
}
|
||||
|
||||
if param.EndTime != "" {
|
||||
sql += gdb.FormatSqlWithArgs(" and date_format(create_time,'%y%m%d') <= date_format(?,'%y%m%d') ", []interface{}{param.EndTime})
|
||||
}
|
||||
}
|
||||
countSql := "select count(1) " + sql
|
||||
total, err = db.GetCount(countSql)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("读取总表数失败")
|
||||
return
|
||||
}
|
||||
sql = "table_name, table_comment, create_time, update_time " + sql
|
||||
|
||||
if param.PageNum == 0 {
|
||||
param.PageNum = 1
|
||||
}
|
||||
|
||||
if param.PageSize == 0 {
|
||||
param.PageSize = service.AdminPageNum
|
||||
}
|
||||
page := (param.PageNum - 1) * param.PageSize
|
||||
sql += " order by create_time desc,table_name asc limit " + gconv.String(page) + "," + gconv.String(param.PageSize)
|
||||
var res gdb.Result
|
||||
res, err = db.GetAll("select " + sql)
|
||||
res.Structs(&list)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("读取数据失败")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//根据条件分页查询数据
|
||||
func SelectListByPage(param *SelectPageReq) (total int, list []*Entity, err error) {
|
||||
model := Model
|
||||
if param != nil {
|
||||
if param.TableName != "" {
|
||||
model = model.Where(Columns.TableName+" like ?", "%"+param.TableName+"%")
|
||||
}
|
||||
if param.TableComment != "" {
|
||||
model = model.Where(Columns.TableComment+"like ?", "%"+param.TableComment+"%")
|
||||
}
|
||||
if param.BeginTime != "" {
|
||||
model = model.Where(Columns.CreateTime+" >= ", param.BeginTime)
|
||||
}
|
||||
if param.EndTime != "" {
|
||||
model = model.Where(Columns.CreateTime+" <= ", param.EndTime)
|
||||
}
|
||||
total, err = model.Count()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("获取总行数失败")
|
||||
return
|
||||
}
|
||||
if param.PageNum == 0 {
|
||||
param.PageNum = 1
|
||||
}
|
||||
if param.PageSize == 0 {
|
||||
param.PageSize = service.AdminPageNum
|
||||
}
|
||||
list, err = model.Page(param.PageNum, param.PageSize).Order(Columns.TableId + " asc").All()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("获取数据失败")
|
||||
return
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//查询据库列表
|
||||
func SelectDbTableListByNames(tableNames []string) ([]*Entity, error) {
|
||||
db := g.DB()
|
||||
sql := "select * from information_schema.tables where table_name NOT LIKE 'qrtz_%' and table_name NOT LIKE 'gen_%' " +
|
||||
" and table_schema = (select database()) "
|
||||
if len(tableNames) > 0 {
|
||||
in := gstr.TrimRight(gstr.Repeat("?,", len(tableNames)), ",")
|
||||
sql += " and " + gdb.FormatSqlWithArgs("table_name in ("+in+")", gconv.SliceAny(tableNames))
|
||||
}
|
||||
var result []*Entity
|
||||
res, err := db.GetAll(sql)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return nil, gerror.New("获取表格信息失败")
|
||||
}
|
||||
err = res.Structs(&result)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return nil, gerror.New("表格信息转换失败")
|
||||
}
|
||||
return result, err
|
||||
}
|
||||
|
||||
//通过表格ID获取表格信息
|
||||
func GetInfoById(tableId int64) (entity *Entity, err error) {
|
||||
entity, err = Model.FindOne(tableId)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("获取表格信息出错")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func SelectRecordById(tableId int64) (entityExtend *EntityExtend, err error) {
|
||||
var entity *Entity
|
||||
entity, err = GetInfoById(tableId)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
m := gconv.Map(entity)
|
||||
gconv.Struct(m, &entityExtend)
|
||||
|
||||
//表字段数据
|
||||
var columns []*gen_table_column.Entity
|
||||
columns, err = gen_table_column.SelectGenTableColumnListByTableId(tableId)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
entityExtend.Columns = columns
|
||||
return
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
// ==========================================================================
|
||||
// This is auto-generated by gf cli tool. You may not really want to edit it.
|
||||
// ==========================================================================
|
||||
|
||||
package gen_table
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"github.com/gogf/gf/database/gdb"
|
||||
"github.com/gogf/gf/os/gtime"
|
||||
)
|
||||
|
||||
// Entity is the golang structure for table gen_table.
|
||||
type Entity struct {
|
||||
TableId int64 `orm:"table_id,primary" json:"table_id"` // 编号
|
||||
TableName string `orm:"table_name" json:"table_name"` // 表名称
|
||||
TableComment string `orm:"table_comment" json:"table_comment"` // 表描述
|
||||
ClassName string `orm:"class_name" json:"class_name"` // 实体类名称
|
||||
TplCategory string `orm:"tpl_category" json:"tpl_category"` // 使用的模板(crud单表操作 tree树表操作)
|
||||
PackageName string `orm:"package_name" json:"package_name"` // 生成包路径
|
||||
ModuleName string `orm:"module_name" json:"module_name"` // 生成模块名
|
||||
BusinessName string `orm:"business_name" json:"business_name"` // 生成业务名
|
||||
FunctionName string `orm:"function_name" json:"function_name"` // 生成功能名
|
||||
FunctionAuthor string `orm:"function_author" json:"function_author"` // 生成功能作者
|
||||
Options string `orm:"options" json:"options"` // 其它生成选项
|
||||
CreateBy string `orm:"create_by" json:"create_by"` // 创建者
|
||||
CreateTime *gtime.Time `orm:"create_time" json:"create_time"` // 创建时间
|
||||
UpdateBy string `orm:"update_by" json:"update_by"` // 更新者
|
||||
UpdateTime *gtime.Time `orm:"update_time" json:"update_time"` // 更新时间
|
||||
Remark string `orm:"remark" json:"remark"` // 备注
|
||||
}
|
||||
|
||||
//修改页面请求参数
|
||||
type EditReq struct {
|
||||
TableId int64 `p:"tableId" v:"required#主键ID不能为空"`
|
||||
TableName string `p:"tableName" v:"required#表名称不能为空"`
|
||||
TableComment string `p:"tableComment" v:"required#表描述不能为空"`
|
||||
ClassName string `p:"className" v:"required#实体类名称不能为空"`
|
||||
FunctionAuthor string `p:"functionAuthor" v:"required#作者不能为空"`
|
||||
TplCategory string `p:"tplCategory"`
|
||||
PackageName string `p:"packageName" v:"required#生成包路径不能为空"`
|
||||
ModuleName string `p:"moduleName" v:"required#生成模块名不能为空"`
|
||||
BusinessName string `p:"businessName" v:"required#生成业务名不能为空"`
|
||||
FunctionName string `p:"functionName" v:"required#生成功能名不能为空"`
|
||||
Remark string `p:"remark"`
|
||||
Params string `p:"params"`
|
||||
Columns string `p:"columns"`
|
||||
TreeCode string `p:"tree_code"`
|
||||
TreeParentCode string `p:"tree_parent_code"`
|
||||
TreeName string `p:"tree_name"`
|
||||
UserName string
|
||||
}
|
||||
|
||||
// OmitEmpty sets OPTION_OMITEMPTY option for the model, which automatically filers
|
||||
// the data and where attributes for empty values.
|
||||
func (r *Entity) OmitEmpty() *arModel {
|
||||
return Model.Data(r).OmitEmpty()
|
||||
}
|
||||
|
||||
// Inserts does "INSERT...INTO..." statement for inserting current object into table.
|
||||
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.
|
||||
func (r *Entity) Replace() (result sql.Result, err error) {
|
||||
return Model.Data(r).Replace()
|
||||
}
|
||||
|
||||
// Save does "INSERT...INTO..." statement for inserting/updating current object into table.
|
||||
// It updates the record if there's already another same record in the table
|
||||
// (it checks using primary key or unique index).
|
||||
func (r *Entity) Save() (result sql.Result, err error) {
|
||||
return Model.Data(r).Save()
|
||||
}
|
||||
|
||||
// Update does "UPDATE...WHERE..." statement for updating current object from table.
|
||||
// It updates the record if there's already another same record in the table
|
||||
// (it checks using primary key or unique index).
|
||||
func (r *Entity) Update() (result sql.Result, err error) {
|
||||
return Model.Data(r).Where(gdb.GetWhereConditionOfStruct(r)).Update()
|
||||
}
|
||||
|
||||
// Delete does "DELETE FROM...WHERE..." statement for deleting current object from table.
|
||||
func (r *Entity) Delete() (result sql.Result, err error) {
|
||||
return Model.Where(gdb.GetWhereConditionOfStruct(r)).Delete()
|
||||
}
|
||||
@@ -0,0 +1,373 @@
|
||||
// ==========================================================================
|
||||
// This is auto-generated by gf cli tool. You may not really want to edit it.
|
||||
// ==========================================================================
|
||||
|
||||
package gen_table
|
||||
|
||||
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 gen_table operations.
|
||||
type arModel struct {
|
||||
gmvc.M
|
||||
}
|
||||
|
||||
var (
|
||||
// Table is the table name of gen_table.
|
||||
Table = "gen_table"
|
||||
// Model is the model object of gen_table.
|
||||
Model = &arModel{g.DB("default").Table(Table).Safe()}
|
||||
// Columns defines and stores column names for table gen_table.
|
||||
Columns = struct {
|
||||
TableId string // 编号
|
||||
TableName string // 表名称
|
||||
TableComment string // 表描述
|
||||
ClassName string // 实体类名称
|
||||
TplCategory string // 使用的模板(crud单表操作 tree树表操作)
|
||||
PackageName string // 生成包路径
|
||||
ModuleName string // 生成模块名
|
||||
BusinessName string // 生成业务名
|
||||
FunctionName string // 生成功能名
|
||||
FunctionAuthor string // 生成功能作者
|
||||
Options string // 其它生成选项
|
||||
CreateBy string // 创建者
|
||||
CreateTime string // 创建时间
|
||||
UpdateBy string // 更新者
|
||||
UpdateTime string // 更新时间
|
||||
Remark string // 备注
|
||||
}{
|
||||
TableId: "table_id",
|
||||
TableName: "table_name",
|
||||
TableComment: "table_comment",
|
||||
ClassName: "class_name",
|
||||
TplCategory: "tpl_category",
|
||||
PackageName: "package_name",
|
||||
ModuleName: "module_name",
|
||||
BusinessName: "business_name",
|
||||
FunctionName: "function_name",
|
||||
FunctionAuthor: "function_author",
|
||||
Options: "options",
|
||||
CreateBy: "create_by",
|
||||
CreateTime: "create_time",
|
||||
UpdateBy: "update_by",
|
||||
UpdateTime: "update_time",
|
||||
Remark: "remark",
|
||||
}
|
||||
)
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Master marks the following operation on master node.
|
||||
func (m *arModel) Master() *arModel {
|
||||
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.M.Slave()}
|
||||
}
|
||||
|
||||
// LeftJoin does "LEFT JOIN ... ON ..." statement on the model.
|
||||
// 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.
|
||||
// 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.
|
||||
// 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.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.M.FieldsEx(fields)}
|
||||
}
|
||||
|
||||
// Option sets the extra operation option for the model.
|
||||
func (m *arModel) Option(option int) *arModel {
|
||||
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.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.M.Filter()}
|
||||
}
|
||||
|
||||
// Where sets the condition statement for the model. The parameter <where> can be type of
|
||||
// string/map/gmap/slice/struct/*struct, etc. Note that, if it's called more than one times,
|
||||
// multiple conditions will be joined into where statement using "AND".
|
||||
// Eg:
|
||||
// Where("uid=10000")
|
||||
// Where("uid", 10000)
|
||||
// Where("money>? AND name like ?", 99999, "vip_%")
|
||||
// Where("uid", 1).Where("name", "john")
|
||||
// Where("status IN (?)", g.Slice{1,2,3})
|
||||
// Where("age IN(?,?)", 18, 50)
|
||||
// Where(User{ Id : 1, UserName : "john"})
|
||||
func (m *arModel) Where(where interface{}, args ...interface{}) *arModel {
|
||||
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.M.And(where, args...)}
|
||||
}
|
||||
|
||||
// Or adds "OR" condition to the where statement.
|
||||
func (m *arModel) Or(where interface{}, args ...interface{}) *arModel {
|
||||
return &arModel{m.M.Or(where, args...)}
|
||||
}
|
||||
|
||||
// Group sets the "GROUP BY" statement for the model.
|
||||
func (m *arModel) Group(groupBy string) *arModel {
|
||||
return &arModel{m.M.Group(groupBy)}
|
||||
}
|
||||
|
||||
// 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.
|
||||
// The parameter <limit> can be either one or two number, if passed two number is passed,
|
||||
// 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.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.M.Offset(offset)}
|
||||
}
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Batch sets the batch operation number for the model.
|
||||
func (m *arModel) Batch(batch int) *arModel {
|
||||
return &arModel{m.M.Batch(batch)}
|
||||
}
|
||||
|
||||
// Cache sets the cache feature for the model. It caches the result of the sql, which means
|
||||
// if there's another same sql request, it just reads and returns the result from cache, it
|
||||
// but not committed and executed into the database.
|
||||
//
|
||||
// If the parameter <duration> < 0, which means it clear the cache with given <name>.
|
||||
// If the parameter <duration> = 0, which means it never expires.
|
||||
// If the parameter <duration> > 0, which means it expires after <duration>.
|
||||
//
|
||||
// The optional parameter <name> is used to bind a name to the cache, which means you can later
|
||||
// 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(duration time.Duration, name ...string) *arModel {
|
||||
return &arModel{m.M.Cache(duration, name...)}
|
||||
}
|
||||
|
||||
// Data sets the operation data for the model.
|
||||
// The parameter <data> can be type of string/map/gmap/slice/struct/*struct, etc.
|
||||
// Eg:
|
||||
// Data("uid=10000")
|
||||
// Data("uid", 10000)
|
||||
// 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.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.
|
||||
//
|
||||
// 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
|
||||
}
|
||||
var entities []*Entity
|
||||
if err = all.Structs(&entities); err != nil && err != sql.ErrNoRows {
|
||||
return nil, err
|
||||
}
|
||||
return entities, nil
|
||||
}
|
||||
|
||||
// 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.
|
||||
//
|
||||
// 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
|
||||
}
|
||||
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.M.Chunk(limit, func(result gdb.Result, err error) bool {
|
||||
var entities []*Entity
|
||||
err = result.Structs(&entities)
|
||||
if err == sql.ErrNoRows {
|
||||
return false
|
||||
}
|
||||
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()}
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
// ============================================================================
|
||||
// This is auto-generated by gf cli tool only once. Fill this file as you wish.
|
||||
// ============================================================================
|
||||
|
||||
package gen_table_column
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/database/gdb"
|
||||
"github.com/gogf/gf/errors/gerror"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
)
|
||||
|
||||
//数据库字符串类型
|
||||
var COLUMNTYPE_STR = []string{"char", "varchar", "narchar", "varchar2", "tinytext", "text", "mediumtext", "longtext"}
|
||||
|
||||
//数据库时间类型
|
||||
var COLUMNTYPE_TIME = []string{"datetime", "time", "date", "timestamp"}
|
||||
|
||||
//数据库数字类型
|
||||
var COLUMNTYPE_NUMBER = []string{"tinyint", "smallint", "mediumint", "int", "number", "integer", "bigint", "float", "float", "double", "decimal"}
|
||||
|
||||
//页面不需要编辑字段
|
||||
var COLUMNNAME_NOT_EDIT = []string{"id", "create_by", "create_time", "del_flag", "update_by", "update_time"}
|
||||
|
||||
//页面不需要显示的列表字段
|
||||
var COLUMNNAME_NOT_LIST = []string{"id", "create_by", "create_time", "del_flag", "update_by", "update_time"}
|
||||
|
||||
//页面不需要查询字段
|
||||
var COLUMNNAME_NOT_QUERY = []string{"id", "create_by", "create_time", "del_flag", "update_by", "update_time", "remark"}
|
||||
|
||||
//根据表名称查询列信息
|
||||
func SelectDbTableColumnsByName(tableName string) ([]*Entity, error) {
|
||||
db := g.DB()
|
||||
var entity []*Entity
|
||||
sql := " select column_name, (case when (is_nullable = 'no' && column_key != 'PRI') then '1' else null end) as is_required, " +
|
||||
"(case when column_key = 'PRI' then '1' else '0' end) as is_pk, ordinal_position as sort, column_comment," +
|
||||
" (case when extra = 'auto_increment' then '1' else '0' end) as is_increment, column_type from information_schema.columns" +
|
||||
" where table_schema = (select database()) "
|
||||
sql += " and " + gdb.FormatSqlWithArgs(" table_name=? ", []interface{}{tableName}) + " order by ordinal_position ASC "
|
||||
result, err := db.GetAll(sql)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return nil, gerror.New("查询列信息失败")
|
||||
}
|
||||
result.Structs(&entity)
|
||||
return entity, nil
|
||||
}
|
||||
|
||||
//判断是否是数据库字符串类型
|
||||
func IsStringObject(value string) bool {
|
||||
return IsExistInArray(value, COLUMNTYPE_STR)
|
||||
}
|
||||
|
||||
//判断是否是数据库时间类型
|
||||
func IsTimeObject(value string) bool {
|
||||
return IsExistInArray(value, COLUMNTYPE_TIME)
|
||||
}
|
||||
|
||||
//判断是否是数据库数字类型
|
||||
func IsNumberObject(value string) bool {
|
||||
return IsExistInArray(value, COLUMNTYPE_NUMBER)
|
||||
}
|
||||
|
||||
//页面不需要编辑字段
|
||||
func IsNotEdit(value string) bool {
|
||||
return !IsExistInArray(value, COLUMNNAME_NOT_EDIT)
|
||||
}
|
||||
|
||||
//页面不需要显示的列表字段
|
||||
func IsNotList(value string) bool {
|
||||
return !IsExistInArray(value, COLUMNNAME_NOT_LIST)
|
||||
}
|
||||
|
||||
//页面不需要查询字段
|
||||
func IsNotQuery(value string) bool {
|
||||
return !IsExistInArray(value, COLUMNNAME_NOT_QUERY)
|
||||
}
|
||||
|
||||
//判断string 是否存在在数组中
|
||||
func IsExistInArray(value string, array []string) bool {
|
||||
for _, v := range array {
|
||||
if v == value {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
//查询业务字段列表
|
||||
func SelectGenTableColumnListByTableId(tableId int64) ([]*Entity, error) {
|
||||
list, err := Model.Where(Columns.TableId, tableId).Order(Columns.Sort + " asc, " + Columns.ColumnId + " asc").All()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return nil, gerror.New("获取字段信息出错")
|
||||
}
|
||||
return list, nil
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
// ==========================================================================
|
||||
// This is auto-generated by gf cli tool. You may not really want to edit it.
|
||||
// ==========================================================================
|
||||
|
||||
package gen_table_column
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"github.com/gogf/gf/database/gdb"
|
||||
"github.com/gogf/gf/os/gtime"
|
||||
)
|
||||
|
||||
// Entity is the golang structure for table gen_table_column.
|
||||
type Entity struct {
|
||||
ColumnId int64 `orm:"column_id,primary" json:"column_id"` // 编号
|
||||
TableId int64 `orm:"table_id" json:"table_id"` // 归属表编号
|
||||
ColumnName string `orm:"column_name" json:"column_name"` // 列名称
|
||||
ColumnComment string `orm:"column_comment" json:"column_comment"` // 列描述
|
||||
ColumnType string `orm:"column_type" json:"column_type"` // 列类型
|
||||
GoType string `orm:"go_type" json:"go_type"` // Go类型
|
||||
GoField string `orm:"go_field" json:"go_field"` // Go字段名
|
||||
HtmlField string `orm:"html_field" json:"html_field"` // html字段名
|
||||
IsPk string `orm:"is_pk" json:"is_pk"` // 是否主键(1是)
|
||||
IsIncrement string `orm:"is_increment" json:"is_increment"` // 是否自增(1是)
|
||||
IsRequired string `orm:"is_required" json:"is_required"` // 是否必填(1是)
|
||||
IsInsert string `orm:"is_insert" json:"is_insert"` // 是否为插入字段(1是)
|
||||
IsEdit string `orm:"is_edit" json:"is_edit"` // 是否编辑字段(1是)
|
||||
IsList string `orm:"is_list" json:"is_list"` // 是否列表字段(1是)
|
||||
IsQuery string `orm:"is_query" json:"is_query"` // 是否查询字段(1是)
|
||||
QueryType string `orm:"query_type" json:"query_type"` // 查询方式(等于、不等于、大于、小于、范围)
|
||||
HtmlType string `orm:"html_type" json:"html_type"` // 显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)
|
||||
DictType string `orm:"dict_type" json:"dict_type"` // 字典类型
|
||||
Sort int `orm:"sort" json:"sort"` // 排序
|
||||
CreateBy string `orm:"create_by" json:"create_by"` // 创建者
|
||||
CreateTime *gtime.Time `orm:"create_time" json:"create_time"` // 创建时间
|
||||
UpdateBy string `orm:"update_by" json:"update_by"` // 更新者
|
||||
UpdateTime *gtime.Time `orm:"update_time" json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
// OmitEmpty sets OPTION_OMITEMPTY option for the model, which automatically filers
|
||||
// the data and where attributes for empty values.
|
||||
func (r *Entity) OmitEmpty() *arModel {
|
||||
return Model.Data(r).OmitEmpty()
|
||||
}
|
||||
|
||||
// Inserts does "INSERT...INTO..." statement for inserting current object into table.
|
||||
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.
|
||||
func (r *Entity) Replace() (result sql.Result, err error) {
|
||||
return Model.Data(r).Replace()
|
||||
}
|
||||
|
||||
// Save does "INSERT...INTO..." statement for inserting/updating current object into table.
|
||||
// It updates the record if there's already another same record in the table
|
||||
// (it checks using primary key or unique index).
|
||||
func (r *Entity) Save() (result sql.Result, err error) {
|
||||
return Model.Data(r).Save()
|
||||
}
|
||||
|
||||
// Update does "UPDATE...WHERE..." statement for updating current object from table.
|
||||
// It updates the record if there's already another same record in the table
|
||||
// (it checks using primary key or unique index).
|
||||
func (r *Entity) Update() (result sql.Result, err error) {
|
||||
return Model.Data(r).Where(gdb.GetWhereConditionOfStruct(r)).Update()
|
||||
}
|
||||
|
||||
// Delete does "DELETE FROM...WHERE..." statement for deleting current object from table.
|
||||
func (r *Entity) Delete() (result sql.Result, err error) {
|
||||
return Model.Where(gdb.GetWhereConditionOfStruct(r)).Delete()
|
||||
}
|
||||
@@ -0,0 +1,387 @@
|
||||
// ==========================================================================
|
||||
// This is auto-generated by gf cli tool. You may not really want to edit it.
|
||||
// ==========================================================================
|
||||
|
||||
package gen_table_column
|
||||
|
||||
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 gen_table_column operations.
|
||||
type arModel struct {
|
||||
gmvc.M
|
||||
}
|
||||
|
||||
var (
|
||||
// Table is the table name of gen_table_column.
|
||||
Table = "gen_table_column"
|
||||
// Model is the model object of gen_table_column.
|
||||
Model = &arModel{g.DB("default").Table(Table).Safe()}
|
||||
// Columns defines and stores column names for table gen_table_column.
|
||||
Columns = struct {
|
||||
ColumnId string // 编号
|
||||
TableId string // 归属表编号
|
||||
ColumnName string // 列名称
|
||||
ColumnComment string // 列描述
|
||||
ColumnType string // 列类型
|
||||
GoType string // Go类型
|
||||
GoField string // Go字段名
|
||||
HtmlField string // html字段名
|
||||
IsPk string // 是否主键(1是)
|
||||
IsIncrement string // 是否自增(1是)
|
||||
IsRequired string // 是否必填(1是)
|
||||
IsInsert string // 是否为插入字段(1是)
|
||||
IsEdit string // 是否编辑字段(1是)
|
||||
IsList string // 是否列表字段(1是)
|
||||
IsQuery string // 是否查询字段(1是)
|
||||
QueryType string // 查询方式(等于、不等于、大于、小于、范围)
|
||||
HtmlType string // 显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)
|
||||
DictType string // 字典类型
|
||||
Sort string // 排序
|
||||
CreateBy string // 创建者
|
||||
CreateTime string // 创建时间
|
||||
UpdateBy string // 更新者
|
||||
UpdateTime string // 更新时间
|
||||
}{
|
||||
ColumnId: "column_id",
|
||||
TableId: "table_id",
|
||||
ColumnName: "column_name",
|
||||
ColumnComment: "column_comment",
|
||||
ColumnType: "column_type",
|
||||
GoType: "go_type",
|
||||
GoField: "go_field",
|
||||
HtmlField: "html_field",
|
||||
IsPk: "is_pk",
|
||||
IsIncrement: "is_increment",
|
||||
IsRequired: "is_required",
|
||||
IsInsert: "is_insert",
|
||||
IsEdit: "is_edit",
|
||||
IsList: "is_list",
|
||||
IsQuery: "is_query",
|
||||
QueryType: "query_type",
|
||||
HtmlType: "html_type",
|
||||
DictType: "dict_type",
|
||||
Sort: "sort",
|
||||
CreateBy: "create_by",
|
||||
CreateTime: "create_time",
|
||||
UpdateBy: "update_by",
|
||||
UpdateTime: "update_time",
|
||||
}
|
||||
)
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Master marks the following operation on master node.
|
||||
func (m *arModel) Master() *arModel {
|
||||
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.M.Slave()}
|
||||
}
|
||||
|
||||
// LeftJoin does "LEFT JOIN ... ON ..." statement on the model.
|
||||
// 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.
|
||||
// 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.
|
||||
// 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.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.M.FieldsEx(fields)}
|
||||
}
|
||||
|
||||
// Option sets the extra operation option for the model.
|
||||
func (m *arModel) Option(option int) *arModel {
|
||||
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.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.M.Filter()}
|
||||
}
|
||||
|
||||
// Where sets the condition statement for the model. The parameter <where> can be type of
|
||||
// string/map/gmap/slice/struct/*struct, etc. Note that, if it's called more than one times,
|
||||
// multiple conditions will be joined into where statement using "AND".
|
||||
// Eg:
|
||||
// Where("uid=10000")
|
||||
// Where("uid", 10000)
|
||||
// Where("money>? AND name like ?", 99999, "vip_%")
|
||||
// Where("uid", 1).Where("name", "john")
|
||||
// Where("status IN (?)", g.Slice{1,2,3})
|
||||
// Where("age IN(?,?)", 18, 50)
|
||||
// Where(User{ Id : 1, UserName : "john"})
|
||||
func (m *arModel) Where(where interface{}, args ...interface{}) *arModel {
|
||||
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.M.And(where, args...)}
|
||||
}
|
||||
|
||||
// Or adds "OR" condition to the where statement.
|
||||
func (m *arModel) Or(where interface{}, args ...interface{}) *arModel {
|
||||
return &arModel{m.M.Or(where, args...)}
|
||||
}
|
||||
|
||||
// Group sets the "GROUP BY" statement for the model.
|
||||
func (m *arModel) Group(groupBy string) *arModel {
|
||||
return &arModel{m.M.Group(groupBy)}
|
||||
}
|
||||
|
||||
// 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.
|
||||
// The parameter <limit> can be either one or two number, if passed two number is passed,
|
||||
// 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.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.M.Offset(offset)}
|
||||
}
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Batch sets the batch operation number for the model.
|
||||
func (m *arModel) Batch(batch int) *arModel {
|
||||
return &arModel{m.M.Batch(batch)}
|
||||
}
|
||||
|
||||
// Cache sets the cache feature for the model. It caches the result of the sql, which means
|
||||
// if there's another same sql request, it just reads and returns the result from cache, it
|
||||
// but not committed and executed into the database.
|
||||
//
|
||||
// If the parameter <duration> < 0, which means it clear the cache with given <name>.
|
||||
// If the parameter <duration> = 0, which means it never expires.
|
||||
// If the parameter <duration> > 0, which means it expires after <duration>.
|
||||
//
|
||||
// The optional parameter <name> is used to bind a name to the cache, which means you can later
|
||||
// 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(duration time.Duration, name ...string) *arModel {
|
||||
return &arModel{m.M.Cache(duration, name...)}
|
||||
}
|
||||
|
||||
// Data sets the operation data for the model.
|
||||
// The parameter <data> can be type of string/map/gmap/slice/struct/*struct, etc.
|
||||
// Eg:
|
||||
// Data("uid=10000")
|
||||
// Data("uid", 10000)
|
||||
// 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.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.
|
||||
//
|
||||
// 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
|
||||
}
|
||||
var entities []*Entity
|
||||
if err = all.Structs(&entities); err != nil && err != sql.ErrNoRows {
|
||||
return nil, err
|
||||
}
|
||||
return entities, nil
|
||||
}
|
||||
|
||||
// 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.
|
||||
//
|
||||
// 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
|
||||
}
|
||||
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.M.Chunk(limit, func(result gdb.Result, err error) bool {
|
||||
var entities []*Entity
|
||||
err = result.Structs(&entities)
|
||||
if err == sql.ErrNoRows {
|
||||
return false
|
||||
}
|
||||
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()}
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
// ============================================================================
|
||||
// This is auto-generated by gf cli tool only once. Fill this file as you wish.
|
||||
// ============================================================================
|
||||
|
||||
package model_category
|
||||
|
||||
import (
|
||||
"gfast/library/service"
|
||||
"github.com/gogf/gf/errors/gerror"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/os/gtime"
|
||||
"github.com/gogf/gf/util/gconv"
|
||||
)
|
||||
|
||||
//列表搜索参数
|
||||
type SearchReq struct {
|
||||
Name string `p:"cName"`
|
||||
Status string `p:"cStatus"`
|
||||
PageNum int `p:"page"` //当前页码
|
||||
PageSize int `p:"pageSize"` //每页数
|
||||
}
|
||||
|
||||
//添加请求数据
|
||||
type AddReq struct {
|
||||
CName string `p:"cName" v:"required#分类名称不能为空"`
|
||||
CSort int `p:"cSort"`
|
||||
CStatus uint `p:"cStatus"`
|
||||
CreateBy uint
|
||||
}
|
||||
|
||||
//修改请求数据
|
||||
type EditReq struct {
|
||||
CId int64 `p:"cId" v:"required#参数错误"`
|
||||
CName string `p:"cName" v:"required#分类名称不能为空"`
|
||||
CSort int `p:"cSort"`
|
||||
CStatus uint `p:"cStatus"`
|
||||
UpdateBy uint
|
||||
}
|
||||
|
||||
func GetList(req *SearchReq) (total int, list []*Entity, err error) {
|
||||
m := Model
|
||||
if req != nil {
|
||||
if req.Name != "" {
|
||||
m = m.Where(Columns.CName+" like ?", "%"+req.Name+"%")
|
||||
}
|
||||
if req.Status != "" {
|
||||
m = m.Where(Columns.CStatus, gconv.Int(req.Status))
|
||||
}
|
||||
}
|
||||
total, err = m.Count()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("获取总行数失败")
|
||||
return
|
||||
}
|
||||
if req.PageNum == 0 {
|
||||
req.PageNum = 1
|
||||
}
|
||||
|
||||
if req.PageSize == 0 {
|
||||
req.PageSize = service.AdminPageNum
|
||||
}
|
||||
list, err = m.Page(req.PageNum, req.PageSize).Order(Columns.CSort + " asc," + Columns.CId + " asc").All()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("获取数据失败")
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//添加分类操作
|
||||
func Add(req *AddReq) error {
|
||||
entity := new(Entity)
|
||||
entity.CName = req.CName
|
||||
entity.CSort = req.CSort
|
||||
entity.CStatus = req.CStatus
|
||||
now := gconv.Uint64(gtime.Timestamp())
|
||||
entity.CreateTime = now
|
||||
entity.UpdateTime = now
|
||||
entity.CreateBy = req.CreateBy
|
||||
if _, err := entity.Save(); err != nil {
|
||||
g.Log().Error(err)
|
||||
return gerror.New("添加失败")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
//修改
|
||||
func Edit(req *EditReq) error {
|
||||
entity, err := Model.FindOne(req.CId)
|
||||
if err != nil || entity == nil {
|
||||
g.Log().Error(err)
|
||||
return gerror.New("获取分类信息失败")
|
||||
}
|
||||
entity.UpdateBy = req.UpdateBy
|
||||
entity.CName = req.CName
|
||||
entity.CSort = req.CSort
|
||||
entity.CStatus = req.CStatus
|
||||
entity.UpdateTime = gconv.Uint64(gtime.Timestamp())
|
||||
_, err = entity.Save()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return gerror.New("修改分类信息失败")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetById(id int64) (entity *Entity, err error) {
|
||||
entity, err = Model.FindOne(id)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("获取分类信息失败")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//删除模型分类
|
||||
func DeleteByIds(ids []int) error {
|
||||
_, err := Model.Where(Columns.CId+" in (?)", ids).Delete()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return gerror.New("删除失败")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
// ==========================================================================
|
||||
// This is auto-generated by gf cli tool. You may not really want to edit it.
|
||||
// ==========================================================================
|
||||
|
||||
package model_category
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"github.com/gogf/gf/database/gdb"
|
||||
)
|
||||
|
||||
// Entity is the golang structure for table model_category.
|
||||
type Entity struct {
|
||||
CId uint `orm:"c_id,primary" json:"c_id"` // 主键
|
||||
CName string `orm:"c_name" json:"c_name"` // 模型分类名称
|
||||
CSort int `orm:"c_sort" json:"c_sort"` // 排序
|
||||
CreateBy uint `orm:"create_by" json:"create_by"` // 创建人
|
||||
CreateTime uint64 `orm:"create_time" json:"create_time"` // 创建时间
|
||||
UpdateBy uint `orm:"update_by" json:"update_by"` // 修改人
|
||||
UpdateTime uint64 `orm:"update_time" json:"update_time"` // 修改时间
|
||||
CStatus uint `orm:"c_status" json:"c_status"` // 状态
|
||||
}
|
||||
|
||||
// OmitEmpty sets OPTION_OMITEMPTY option for the model, which automatically filers
|
||||
// the data and where attributes for empty values.
|
||||
func (r *Entity) OmitEmpty() *arModel {
|
||||
return Model.Data(r).OmitEmpty()
|
||||
}
|
||||
|
||||
// Inserts does "INSERT...INTO..." statement for inserting current object into table.
|
||||
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.
|
||||
func (r *Entity) Replace() (result sql.Result, err error) {
|
||||
return Model.Data(r).Replace()
|
||||
}
|
||||
|
||||
// Save does "INSERT...INTO..." statement for inserting/updating current object into table.
|
||||
// It updates the record if there's already another same record in the table
|
||||
// (it checks using primary key or unique index).
|
||||
func (r *Entity) Save() (result sql.Result, err error) {
|
||||
return Model.Data(r).Save()
|
||||
}
|
||||
|
||||
// Update does "UPDATE...WHERE..." statement for updating current object from table.
|
||||
// It updates the record if there's already another same record in the table
|
||||
// (it checks using primary key or unique index).
|
||||
func (r *Entity) Update() (result sql.Result, err error) {
|
||||
return Model.Data(r).Where(gdb.GetWhereConditionOfStruct(r)).Update()
|
||||
}
|
||||
|
||||
// Delete does "DELETE FROM...WHERE..." statement for deleting current object from table.
|
||||
func (r *Entity) Delete() (result sql.Result, err error) {
|
||||
return Model.Where(gdb.GetWhereConditionOfStruct(r)).Delete()
|
||||
}
|
||||
@@ -0,0 +1,357 @@
|
||||
// ==========================================================================
|
||||
// This is auto-generated by gf cli tool. You may not really want to edit it.
|
||||
// ==========================================================================
|
||||
|
||||
package model_category
|
||||
|
||||
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 model_category operations.
|
||||
type arModel struct {
|
||||
gmvc.M
|
||||
}
|
||||
|
||||
var (
|
||||
// Table is the table name of model_category.
|
||||
Table = "model_category"
|
||||
// Model is the model object of model_category.
|
||||
Model = &arModel{g.DB("default").Table(Table).Safe()}
|
||||
// Columns defines and stores column names for table model_category.
|
||||
Columns = struct {
|
||||
CId string // 主键
|
||||
CName string // 模型分类名称
|
||||
CSort string // 排序
|
||||
CreateBy string // 创建人
|
||||
CreateTime string // 创建时间
|
||||
UpdateBy string // 修改人
|
||||
UpdateTime string // 修改时间
|
||||
CStatus string // 状态
|
||||
}{
|
||||
CId: "c_id",
|
||||
CName: "c_name",
|
||||
CSort: "c_sort",
|
||||
CreateBy: "create_by",
|
||||
CreateTime: "create_time",
|
||||
UpdateBy: "update_by",
|
||||
UpdateTime: "update_time",
|
||||
CStatus: "c_status",
|
||||
}
|
||||
)
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Master marks the following operation on master node.
|
||||
func (m *arModel) Master() *arModel {
|
||||
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.M.Slave()}
|
||||
}
|
||||
|
||||
// LeftJoin does "LEFT JOIN ... ON ..." statement on the model.
|
||||
// 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.
|
||||
// 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.
|
||||
// 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.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.M.FieldsEx(fields)}
|
||||
}
|
||||
|
||||
// Option sets the extra operation option for the model.
|
||||
func (m *arModel) Option(option int) *arModel {
|
||||
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.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.M.Filter()}
|
||||
}
|
||||
|
||||
// Where sets the condition statement for the model. The parameter <where> can be type of
|
||||
// string/map/gmap/slice/struct/*struct, etc. Note that, if it's called more than one times,
|
||||
// multiple conditions will be joined into where statement using "AND".
|
||||
// Eg:
|
||||
// Where("uid=10000")
|
||||
// Where("uid", 10000)
|
||||
// Where("money>? AND name like ?", 99999, "vip_%")
|
||||
// Where("uid", 1).Where("name", "john")
|
||||
// Where("status IN (?)", g.Slice{1,2,3})
|
||||
// Where("age IN(?,?)", 18, 50)
|
||||
// Where(User{ Id : 1, UserName : "john"})
|
||||
func (m *arModel) Where(where interface{}, args ...interface{}) *arModel {
|
||||
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.M.And(where, args...)}
|
||||
}
|
||||
|
||||
// Or adds "OR" condition to the where statement.
|
||||
func (m *arModel) Or(where interface{}, args ...interface{}) *arModel {
|
||||
return &arModel{m.M.Or(where, args...)}
|
||||
}
|
||||
|
||||
// Group sets the "GROUP BY" statement for the model.
|
||||
func (m *arModel) Group(groupBy string) *arModel {
|
||||
return &arModel{m.M.Group(groupBy)}
|
||||
}
|
||||
|
||||
// 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.
|
||||
// The parameter <limit> can be either one or two number, if passed two number is passed,
|
||||
// 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.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.M.Offset(offset)}
|
||||
}
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Batch sets the batch operation number for the model.
|
||||
func (m *arModel) Batch(batch int) *arModel {
|
||||
return &arModel{m.M.Batch(batch)}
|
||||
}
|
||||
|
||||
// Cache sets the cache feature for the model. It caches the result of the sql, which means
|
||||
// if there's another same sql request, it just reads and returns the result from cache, it
|
||||
// but not committed and executed into the database.
|
||||
//
|
||||
// If the parameter <duration> < 0, which means it clear the cache with given <name>.
|
||||
// If the parameter <duration> = 0, which means it never expires.
|
||||
// If the parameter <duration> > 0, which means it expires after <duration>.
|
||||
//
|
||||
// The optional parameter <name> is used to bind a name to the cache, which means you can later
|
||||
// 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(duration time.Duration, name ...string) *arModel {
|
||||
return &arModel{m.M.Cache(duration, name...)}
|
||||
}
|
||||
|
||||
// Data sets the operation data for the model.
|
||||
// The parameter <data> can be type of string/map/gmap/slice/struct/*struct, etc.
|
||||
// Eg:
|
||||
// Data("uid=10000")
|
||||
// Data("uid", 10000)
|
||||
// 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.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.
|
||||
//
|
||||
// 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
|
||||
}
|
||||
var entities []*Entity
|
||||
if err = all.Structs(&entities); err != nil && err != sql.ErrNoRows {
|
||||
return nil, err
|
||||
}
|
||||
return entities, nil
|
||||
}
|
||||
|
||||
// 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.
|
||||
//
|
||||
// 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
|
||||
}
|
||||
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.M.Chunk(limit, func(result gdb.Result, err error) bool {
|
||||
var entities []*Entity
|
||||
err = result.Structs(&entities)
|
||||
if err == sql.ErrNoRows {
|
||||
return false
|
||||
}
|
||||
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()}
|
||||
}
|
||||
@@ -0,0 +1,136 @@
|
||||
package plug_ad
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/errors/gerror"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/os/gtime"
|
||||
)
|
||||
|
||||
// AddReq 用于存储新增广告请求的请求参数
|
||||
type AddReq struct {
|
||||
AdName string `p:"adName"` // 广告名称
|
||||
AdAdtypeid int `p:"adAdtypeid"` // 所属位置
|
||||
AdCheckid int `p:"adCheckid"` // 1=图片 2=JS
|
||||
AdJs string `p:"adJs"` // JS代码
|
||||
AdPic string `p:"adPic"` // 广告图片URL
|
||||
AdUrl string `p:"adUrl"` // 广告链接
|
||||
AdContent string `p:"adContent"` // 广告文字内容
|
||||
AdSort int `p:"adSort"` // 排序
|
||||
AdOpen int `p:"adOpen"` // 1=审核 0=未审核
|
||||
}
|
||||
|
||||
// EditReq 用于存储修改广告位请求参数
|
||||
type EditReq struct {
|
||||
PlugAdID int64 `p:"plugAdID"`
|
||||
AddReq
|
||||
}
|
||||
|
||||
// SelectPageReq 用于存储分页查询广告的请求参数
|
||||
type SelectPageReq struct {
|
||||
AdName string `p:"adName"` // 广告名称
|
||||
PageNo int64 `p:"pageNo"` // 当前页
|
||||
PageSize int64 `p:"pageSize"` // 每页显示记录数
|
||||
}
|
||||
|
||||
// GetPlugAdByID 根据ID查询广告记录
|
||||
func GetPlugAdByID(id int64) (*Entity, error) {
|
||||
entity, err := Model.FindOne("ad_id", id)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("根据ID查询广告记录出错")
|
||||
}
|
||||
if entity == nil {
|
||||
err = gerror.New("根据ID未能查询到广告记录")
|
||||
}
|
||||
return entity, nil
|
||||
}
|
||||
|
||||
// AddSave 添加广告
|
||||
func AddSave(req *AddReq) error {
|
||||
var entity Entity
|
||||
entity.AdName = req.AdName // 名称
|
||||
entity.AdAdtypeid = req.AdAdtypeid // 位置
|
||||
entity.AdCheckid = req.AdCheckid // 1=图片 2=JS
|
||||
entity.AdJs = req.AdJs // JS代码
|
||||
entity.AdPic = req.AdPic // 广告图片URL
|
||||
entity.AdUrl = req.AdUrl // 广告链接
|
||||
entity.AdContent = req.AdContent // 广告文字内容
|
||||
entity.AdAddtime = int(gtime.Timestamp()) // 时间戳
|
||||
entity.AdSort = req.AdSort // 排序
|
||||
entity.AdOpen = req.AdOpen // 1=审核 0=未审核
|
||||
// 保存实体
|
||||
_, err := entity.Insert()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("保存失败")
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 删除广告
|
||||
func DeleteByIDs(Ids []int) error {
|
||||
_, err := Model.Delete("ad_id in(?)", Ids)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return gerror.New("删除广告失败")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 根据广告ID来修改广告位信息
|
||||
func EditSave(editReq *EditReq) error {
|
||||
// 先根据ID来查询要修改的广告记录
|
||||
entity, err := GetPlugAdByID(editReq.PlugAdID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// 修改实体
|
||||
entity.AdName = editReq.AdName
|
||||
entity.AdAdtypeid = editReq.AdAdtypeid
|
||||
entity.AdCheckid = editReq.AdCheckid
|
||||
entity.AdJs = editReq.AdJs
|
||||
entity.AdPic = editReq.AdPic
|
||||
entity.AdUrl = editReq.AdUrl
|
||||
entity.AdContent = editReq.AdContent
|
||||
entity.AdSort = editReq.AdSort
|
||||
entity.AdOpen = editReq.AdOpen
|
||||
_, err = entity.Update()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return gerror.New("修改广告位失败")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 分页查询,返回值total总记录数,page当前页
|
||||
func SelectListByPage(req *SelectPageReq) (total int, page int64, list []*Entity, err error) {
|
||||
model := Model
|
||||
if req != nil {
|
||||
if req.AdName != "" {
|
||||
model = model.Where("ad_name like ?", "%"+req.AdName+"%")
|
||||
}
|
||||
}
|
||||
// 查询广告位总记录数(总行数)
|
||||
total, err = model.Count()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("获取总记录数失败")
|
||||
return 0, 0, nil, err
|
||||
}
|
||||
if req.PageNo == 0 {
|
||||
req.PageNo = 1
|
||||
}
|
||||
page = req.PageNo
|
||||
if req.PageSize == 0 {
|
||||
req.PageSize = 10
|
||||
}
|
||||
// 分页排序查询
|
||||
list, err = model.Page(int(page), int(req.PageSize)).Order("ad_sort asc,ad_id asc").All()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("分页查询广告失败")
|
||||
return 0, 0, nil, err
|
||||
}
|
||||
return total, page, list, nil
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
// ==========================================================================
|
||||
// This is auto-generated by gf cli tool. You may not really want to edit it.
|
||||
// ==========================================================================
|
||||
|
||||
package plug_ad
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"github.com/gogf/gf/database/gdb"
|
||||
)
|
||||
|
||||
// Entity is the golang structure for table plug_ad.
|
||||
type Entity struct {
|
||||
AdId int `orm:"ad_id,primary" json:"ad_id"` //
|
||||
AdName string `orm:"ad_name" json:"ad_name"` // 广告名称
|
||||
AdAdtypeid int `orm:"ad_adtypeid" json:"ad_adtypeid"` // 所属位置
|
||||
AdCheckid int `orm:"ad_checkid" json:"ad_checkid"` // 1=图片 2=JS
|
||||
AdJs string `orm:"ad_js" json:"ad_js"` // JS代码
|
||||
AdPic string `orm:"ad_pic" json:"ad_pic"` // 广告图片URL
|
||||
AdUrl string `orm:"ad_url" json:"ad_url"` // 广告链接
|
||||
AdContent string `orm:"ad_content" json:"ad_content"` // 广告文字内容
|
||||
AdAddtime int `orm:"ad_addtime" json:"ad_addtime"` // 添加时间
|
||||
AdSort int `orm:"ad_sort" json:"ad_sort"` // 排序
|
||||
AdOpen int `orm:"ad_open" json:"ad_open"` // 1=审核 0=未审核
|
||||
}
|
||||
|
||||
// OmitEmpty sets OPTION_OMITEMPTY option for the model, which automatically filers
|
||||
// the data and where attributes for empty values.
|
||||
func (r *Entity) OmitEmpty() *arModel {
|
||||
return Model.Data(r).OmitEmpty()
|
||||
}
|
||||
|
||||
// Inserts does "INSERT...INTO..." statement for inserting current object into table.
|
||||
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.
|
||||
func (r *Entity) Replace() (result sql.Result, err error) {
|
||||
return Model.Data(r).Replace()
|
||||
}
|
||||
|
||||
// Save does "INSERT...INTO..." statement for inserting/updating current object into table.
|
||||
// It updates the record if there's already another same record in the table
|
||||
// (it checks using primary key or unique index).
|
||||
func (r *Entity) Save() (result sql.Result, err error) {
|
||||
return Model.Data(r).Save()
|
||||
}
|
||||
|
||||
// Update does "UPDATE...WHERE..." statement for updating current object from table.
|
||||
// It updates the record if there's already another same record in the table
|
||||
// (it checks using primary key or unique index).
|
||||
func (r *Entity) Update() (result sql.Result, err error) {
|
||||
return Model.Data(r).Where(gdb.GetWhereConditionOfStruct(r)).Update()
|
||||
}
|
||||
|
||||
// Delete does "DELETE FROM...WHERE..." statement for deleting current object from table.
|
||||
func (r *Entity) Delete() (result sql.Result, err error) {
|
||||
return Model.Where(gdb.GetWhereConditionOfStruct(r)).Delete()
|
||||
}
|
||||
@@ -0,0 +1,363 @@
|
||||
// ==========================================================================
|
||||
// This is auto-generated by gf cli tool. You may not really want to edit it.
|
||||
// ==========================================================================
|
||||
|
||||
package plug_ad
|
||||
|
||||
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 plug_ad operations.
|
||||
type arModel struct {
|
||||
gmvc.M
|
||||
}
|
||||
|
||||
var (
|
||||
// Table is the table name of plug_ad.
|
||||
Table = "plug_ad"
|
||||
// Model is the model object of plug_ad.
|
||||
Model = &arModel{g.DB("default").Table(Table).Safe()}
|
||||
// Columns defines and stores column names for table plug_ad.
|
||||
Columns = struct {
|
||||
AdId string //
|
||||
AdName string // 广告名称
|
||||
AdAdtypeid string // 所属位置
|
||||
AdCheckid string // 1=图片 2=JS
|
||||
AdJs string // JS代码
|
||||
AdPic string // 广告图片URL
|
||||
AdUrl string // 广告链接
|
||||
AdContent string // 广告文字内容
|
||||
AdAddtime string // 添加时间
|
||||
AdSort string // 排序
|
||||
AdOpen string // 1=审核 0=未审核
|
||||
}{
|
||||
AdId: "ad_id",
|
||||
AdName: "ad_name",
|
||||
AdAdtypeid: "ad_adtypeid",
|
||||
AdCheckid: "ad_checkid",
|
||||
AdJs: "ad_js",
|
||||
AdPic: "ad_pic",
|
||||
AdUrl: "ad_url",
|
||||
AdContent: "ad_content",
|
||||
AdAddtime: "ad_addtime",
|
||||
AdSort: "ad_sort",
|
||||
AdOpen: "ad_open",
|
||||
}
|
||||
)
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Master marks the following operation on master node.
|
||||
func (m *arModel) Master() *arModel {
|
||||
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.M.Slave()}
|
||||
}
|
||||
|
||||
// LeftJoin does "LEFT JOIN ... ON ..." statement on the model.
|
||||
// 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.
|
||||
// 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.
|
||||
// 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.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.M.FieldsEx(fields)}
|
||||
}
|
||||
|
||||
// Option sets the extra operation option for the model.
|
||||
func (m *arModel) Option(option int) *arModel {
|
||||
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.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.M.Filter()}
|
||||
}
|
||||
|
||||
// Where sets the condition statement for the model. The parameter <where> can be type of
|
||||
// string/map/gmap/slice/struct/*struct, etc. Note that, if it's called more than one times,
|
||||
// multiple conditions will be joined into where statement using "AND".
|
||||
// Eg:
|
||||
// Where("uid=10000")
|
||||
// Where("uid", 10000)
|
||||
// Where("money>? AND name like ?", 99999, "vip_%")
|
||||
// Where("uid", 1).Where("name", "john")
|
||||
// Where("status IN (?)", g.Slice{1,2,3})
|
||||
// Where("age IN(?,?)", 18, 50)
|
||||
// Where(User{ Id : 1, UserName : "john"})
|
||||
func (m *arModel) Where(where interface{}, args ...interface{}) *arModel {
|
||||
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.M.And(where, args...)}
|
||||
}
|
||||
|
||||
// Or adds "OR" condition to the where statement.
|
||||
func (m *arModel) Or(where interface{}, args ...interface{}) *arModel {
|
||||
return &arModel{m.M.Or(where, args...)}
|
||||
}
|
||||
|
||||
// Group sets the "GROUP BY" statement for the model.
|
||||
func (m *arModel) Group(groupBy string) *arModel {
|
||||
return &arModel{m.M.Group(groupBy)}
|
||||
}
|
||||
|
||||
// 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.
|
||||
// The parameter <limit> can be either one or two number, if passed two number is passed,
|
||||
// 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.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.M.Offset(offset)}
|
||||
}
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Batch sets the batch operation number for the model.
|
||||
func (m *arModel) Batch(batch int) *arModel {
|
||||
return &arModel{m.M.Batch(batch)}
|
||||
}
|
||||
|
||||
// Cache sets the cache feature for the model. It caches the result of the sql, which means
|
||||
// if there's another same sql request, it just reads and returns the result from cache, it
|
||||
// but not committed and executed into the database.
|
||||
//
|
||||
// If the parameter <duration> < 0, which means it clear the cache with given <name>.
|
||||
// If the parameter <duration> = 0, which means it never expires.
|
||||
// If the parameter <duration> > 0, which means it expires after <duration>.
|
||||
//
|
||||
// The optional parameter <name> is used to bind a name to the cache, which means you can later
|
||||
// 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(duration time.Duration, name ...string) *arModel {
|
||||
return &arModel{m.M.Cache(duration, name...)}
|
||||
}
|
||||
|
||||
// Data sets the operation data for the model.
|
||||
// The parameter <data> can be type of string/map/gmap/slice/struct/*struct, etc.
|
||||
// Eg:
|
||||
// Data("uid=10000")
|
||||
// Data("uid", 10000)
|
||||
// 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.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.
|
||||
//
|
||||
// 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
|
||||
}
|
||||
var entities []*Entity
|
||||
if err = all.Structs(&entities); err != nil && err != sql.ErrNoRows {
|
||||
return nil, err
|
||||
}
|
||||
return entities, nil
|
||||
}
|
||||
|
||||
// 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.
|
||||
//
|
||||
// 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
|
||||
}
|
||||
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.M.Chunk(limit, func(result gdb.Result, err error) bool {
|
||||
var entities []*Entity
|
||||
err = result.Structs(&entities)
|
||||
if err == sql.ErrNoRows {
|
||||
return false
|
||||
}
|
||||
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()}
|
||||
}
|
||||
@@ -0,0 +1,136 @@
|
||||
// ============================================================================
|
||||
// This is auto-generated by gf cli tool only once. Fill this file as you wish.
|
||||
// ============================================================================
|
||||
|
||||
package plug_adtype
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/errors/gerror"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
)
|
||||
|
||||
// AddReq 用于存储新增广告位请求参数
|
||||
type AddReq struct {
|
||||
AdtypeName string `p:"adTypeName" v:"required#广告位名称不能为空"` // 广告位名称
|
||||
AdtypeSort int `p:"adTypeSort" v:"required#广告位排序不能为空"` // 广告位排序
|
||||
}
|
||||
|
||||
// EditReq 用于存储修改广告位请求参数
|
||||
type EditReq struct {
|
||||
AdtypeID int64 `p:"adtypeID" v:"required|min:1#主键ID不能为空|主键ID值错误"`
|
||||
AddReq
|
||||
}
|
||||
|
||||
// SelectPageReq 用于存储分页查询广告位的请求参数
|
||||
type SelectPageReq struct {
|
||||
AdtypeName string `p:"adTypeName"` // 广告位名称
|
||||
PageNo int64 `p:"pageNo"` // 当前页
|
||||
PageSize int64 `p:"pageSize"` // 每页显示记录数
|
||||
}
|
||||
|
||||
// GetAdtypeByID 根据ID查询广告位记录
|
||||
func GetAdtypeByID(id int64) (*Entity, error) {
|
||||
entity, err := Model.FindOne(id)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("根据ID查询广告位记录出错")
|
||||
}
|
||||
if entity == nil {
|
||||
err = gerror.New("根据ID未能查询到广告位记录")
|
||||
}
|
||||
return entity, nil
|
||||
}
|
||||
|
||||
// 根据广告位的名称来判断是否已存在相同名称的广告位
|
||||
func CheakAdtypeNameUnique(adtypeName string, adTypeId int64) error {
|
||||
var (
|
||||
entity *Entity
|
||||
err error
|
||||
)
|
||||
if adTypeId == 0 {
|
||||
entity, err = Model.FindOne(Columns.AdtypeName, adtypeName)
|
||||
} else {
|
||||
entity, err = Model.Where(Columns.AdtypeName, adtypeName).And(Columns.AdtypeId+"!=?", adTypeId).FindOne()
|
||||
}
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return gerror.New("校验广告位唯一性失败")
|
||||
}
|
||||
if entity != nil {
|
||||
return gerror.New("广告位名称已经存在")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddSave 添加广告位
|
||||
func AddSave(req *AddReq) error {
|
||||
var entity Entity
|
||||
entity.AdtypeName = req.AdtypeName
|
||||
entity.AdtypeSort = req.AdtypeSort
|
||||
_, err := entity.Insert()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("保存广告位失败")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 根据广告位ID来删除广告位
|
||||
func DeleteAdTypeByID(id []int) error {
|
||||
_, err := Model.Where("adtype_id in(?)", id).Delete()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return gerror.New("删除广告位失败")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 根据广告位ID来修改广告位信息
|
||||
func EditSave(editReq *EditReq) error {
|
||||
// 先根据ID来查询要修改的广告位记录
|
||||
entity, err := GetAdtypeByID(editReq.AdtypeID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// 修改实体
|
||||
entity.AdtypeName = editReq.AdtypeName
|
||||
entity.AdtypeSort = editReq.AdtypeSort
|
||||
_, err = entity.Update()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return gerror.New("修改广告位失败")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 分页查询,返回值total总记录数,page当前页
|
||||
func SelectListByPage(req *SelectPageReq) (total int, page int64, list []*Entity, err error) {
|
||||
model := Model
|
||||
if req != nil {
|
||||
if req.AdtypeName != "" {
|
||||
model = model.Where("adtype_name like ?", "%"+req.AdtypeName+"%")
|
||||
}
|
||||
}
|
||||
// 查询广告位总记录数(总行数)
|
||||
total, err = model.Count()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("获取总记录数失败")
|
||||
return 0, 0, nil, err
|
||||
}
|
||||
if req.PageNo == 0 {
|
||||
req.PageNo = 1
|
||||
}
|
||||
page = req.PageNo
|
||||
if req.PageSize == 0 {
|
||||
req.PageSize = 10
|
||||
}
|
||||
// 分页排序查询
|
||||
list, err = model.Page(int(page), int(req.PageSize)).Order("adtype_sort asc,adtype_id asc").All()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("分页查询广告位失败")
|
||||
return 0, 0, nil, err
|
||||
}
|
||||
return total, page, list, nil
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
// ==========================================================================
|
||||
// This is auto-generated by gf cli tool. You may not really want to edit it.
|
||||
// ==========================================================================
|
||||
|
||||
package plug_adtype
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"github.com/gogf/gf/database/gdb"
|
||||
)
|
||||
|
||||
// Entity is the golang structure for table plug_adtype.
|
||||
type Entity struct {
|
||||
AdtypeId int `orm:"adtype_id,primary" json:"adtype_id"` //
|
||||
AdtypeName string `orm:"adtype_name" json:"adtype_name"` // 广告位名称
|
||||
AdtypeSort int `orm:"adtype_sort" json:"adtype_sort"` // 广告位排序
|
||||
}
|
||||
|
||||
// OmitEmpty sets OPTION_OMITEMPTY option for the model, which automatically filers
|
||||
// the data and where attributes for empty values.
|
||||
func (r *Entity) OmitEmpty() *arModel {
|
||||
return Model.Data(r).OmitEmpty()
|
||||
}
|
||||
|
||||
// Inserts does "INSERT...INTO..." statement for inserting current object into table.
|
||||
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.
|
||||
func (r *Entity) Replace() (result sql.Result, err error) {
|
||||
return Model.Data(r).Replace()
|
||||
}
|
||||
|
||||
// Save does "INSERT...INTO..." statement for inserting/updating current object into table.
|
||||
// It updates the record if there's already another same record in the table
|
||||
// (it checks using primary key or unique index).
|
||||
func (r *Entity) Save() (result sql.Result, err error) {
|
||||
return Model.Data(r).Save()
|
||||
}
|
||||
|
||||
// Update does "UPDATE...WHERE..." statement for updating current object from table.
|
||||
// It updates the record if there's already another same record in the table
|
||||
// (it checks using primary key or unique index).
|
||||
func (r *Entity) Update() (result sql.Result, err error) {
|
||||
return Model.Data(r).Where(gdb.GetWhereConditionOfStruct(r)).Update()
|
||||
}
|
||||
|
||||
// Delete does "DELETE FROM...WHERE..." statement for deleting current object from table.
|
||||
func (r *Entity) Delete() (result sql.Result, err error) {
|
||||
return Model.Where(gdb.GetWhereConditionOfStruct(r)).Delete()
|
||||
}
|
||||
@@ -0,0 +1,347 @@
|
||||
// ==========================================================================
|
||||
// This is auto-generated by gf cli tool. You may not really want to edit it.
|
||||
// ==========================================================================
|
||||
|
||||
package plug_adtype
|
||||
|
||||
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 plug_adtype operations.
|
||||
type arModel struct {
|
||||
gmvc.M
|
||||
}
|
||||
|
||||
var (
|
||||
// Table is the table name of plug_adtype.
|
||||
Table = "plug_adtype"
|
||||
// Model is the model object of plug_adtype.
|
||||
Model = &arModel{g.DB("default").Table(Table).Safe()}
|
||||
// Columns defines and stores column names for table plug_adtype.
|
||||
Columns = struct {
|
||||
AdtypeId string //
|
||||
AdtypeName string // 广告位名称
|
||||
AdtypeSort string // 广告位排序
|
||||
}{
|
||||
AdtypeId: "adtype_id",
|
||||
AdtypeName: "adtype_name",
|
||||
AdtypeSort: "adtype_sort",
|
||||
}
|
||||
)
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Master marks the following operation on master node.
|
||||
func (m *arModel) Master() *arModel {
|
||||
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.M.Slave()}
|
||||
}
|
||||
|
||||
// LeftJoin does "LEFT JOIN ... ON ..." statement on the model.
|
||||
// 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.
|
||||
// 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.
|
||||
// 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.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.M.FieldsEx(fields)}
|
||||
}
|
||||
|
||||
// Option sets the extra operation option for the model.
|
||||
func (m *arModel) Option(option int) *arModel {
|
||||
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.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.M.Filter()}
|
||||
}
|
||||
|
||||
// Where sets the condition statement for the model. The parameter <where> can be type of
|
||||
// string/map/gmap/slice/struct/*struct, etc. Note that, if it's called more than one times,
|
||||
// multiple conditions will be joined into where statement using "AND".
|
||||
// Eg:
|
||||
// Where("uid=10000")
|
||||
// Where("uid", 10000)
|
||||
// Where("money>? AND name like ?", 99999, "vip_%")
|
||||
// Where("uid", 1).Where("name", "john")
|
||||
// Where("status IN (?)", g.Slice{1,2,3})
|
||||
// Where("age IN(?,?)", 18, 50)
|
||||
// Where(User{ Id : 1, UserName : "john"})
|
||||
func (m *arModel) Where(where interface{}, args ...interface{}) *arModel {
|
||||
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.M.And(where, args...)}
|
||||
}
|
||||
|
||||
// Or adds "OR" condition to the where statement.
|
||||
func (m *arModel) Or(where interface{}, args ...interface{}) *arModel {
|
||||
return &arModel{m.M.Or(where, args...)}
|
||||
}
|
||||
|
||||
// Group sets the "GROUP BY" statement for the model.
|
||||
func (m *arModel) Group(groupBy string) *arModel {
|
||||
return &arModel{m.M.Group(groupBy)}
|
||||
}
|
||||
|
||||
// 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.
|
||||
// The parameter <limit> can be either one or two number, if passed two number is passed,
|
||||
// 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.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.M.Offset(offset)}
|
||||
}
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Batch sets the batch operation number for the model.
|
||||
func (m *arModel) Batch(batch int) *arModel {
|
||||
return &arModel{m.M.Batch(batch)}
|
||||
}
|
||||
|
||||
// Cache sets the cache feature for the model. It caches the result of the sql, which means
|
||||
// if there's another same sql request, it just reads and returns the result from cache, it
|
||||
// but not committed and executed into the database.
|
||||
//
|
||||
// If the parameter <duration> < 0, which means it clear the cache with given <name>.
|
||||
// If the parameter <duration> = 0, which means it never expires.
|
||||
// If the parameter <duration> > 0, which means it expires after <duration>.
|
||||
//
|
||||
// The optional parameter <name> is used to bind a name to the cache, which means you can later
|
||||
// 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(duration time.Duration, name ...string) *arModel {
|
||||
return &arModel{m.M.Cache(duration, name...)}
|
||||
}
|
||||
|
||||
// Data sets the operation data for the model.
|
||||
// The parameter <data> can be type of string/map/gmap/slice/struct/*struct, etc.
|
||||
// Eg:
|
||||
// Data("uid=10000")
|
||||
// Data("uid", 10000)
|
||||
// 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.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.
|
||||
//
|
||||
// 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
|
||||
}
|
||||
var entities []*Entity
|
||||
if err = all.Structs(&entities); err != nil && err != sql.ErrNoRows {
|
||||
return nil, err
|
||||
}
|
||||
return entities, nil
|
||||
}
|
||||
|
||||
// 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.
|
||||
//
|
||||
// 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
|
||||
}
|
||||
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.M.Chunk(limit, func(result gdb.Result, err error) bool {
|
||||
var entities []*Entity
|
||||
err = result.Structs(&entities)
|
||||
if err == sql.ErrNoRows {
|
||||
return false
|
||||
}
|
||||
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()}
|
||||
}
|
||||
+135
-11
@@ -4,8 +4,10 @@ import (
|
||||
"database/sql"
|
||||
"errors"
|
||||
"fmt"
|
||||
"gfast/app/model/admin/role_dept"
|
||||
"gfast/app/service/cache_service"
|
||||
"gfast/app/service/casbin_adapter_service"
|
||||
"gfast/library/service"
|
||||
"gfast/library/utils"
|
||||
"github.com/gogf/gf/database/gdb"
|
||||
"github.com/gogf/gf/errors/gerror"
|
||||
@@ -15,6 +17,69 @@ import (
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
//分页请求参数
|
||||
type SelectPageReq struct {
|
||||
RoleName string `p:"roleName"` //参数名称
|
||||
BeginTime string `p:"beginTime"` //开始时间
|
||||
EndTime string `p:"endTime"` //结束时间
|
||||
Status string `p:"status"` //状态
|
||||
PageNum int `p:"pageNum"` //当前页码
|
||||
PageSize int `p:"pageSize"` //每页数
|
||||
}
|
||||
|
||||
//修改状态参数
|
||||
type StatusSetReq struct {
|
||||
RoleId uint `p:"roleId" v:"required#角色ID不能为空"`
|
||||
Status int `p:"status" v:"required#状态不能为空"`
|
||||
}
|
||||
|
||||
//角色数据授权参数
|
||||
type DataScopeReq struct {
|
||||
RoleId uint `p:"roleId" v:"required#角色ID不能为空"`
|
||||
DataScope uint `p:"dataScope" v:"required#权限范围不能为空"`
|
||||
DeptIds []uint `p:"deptIds"`
|
||||
}
|
||||
|
||||
func GetRoleListSearch(req *SelectPageReq) (total, page int, list []*Entity, err error) {
|
||||
model := Model
|
||||
if req != nil {
|
||||
if req.RoleName != "" {
|
||||
model = model.Where("name like ?", "%"+req.RoleName+"%")
|
||||
}
|
||||
if req.Status != "" {
|
||||
model = model.Where("status", gconv.Int(req.Status))
|
||||
}
|
||||
if req.BeginTime != "" {
|
||||
model = model.Where("create_time >= ? ", utils.StrToTimestamp(req.BeginTime))
|
||||
}
|
||||
|
||||
if req.EndTime != "" {
|
||||
model = model.Where("create_time<=?", utils.StrToTimestamp(req.EndTime))
|
||||
}
|
||||
}
|
||||
total, err = model.Count()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("获取总行数失败")
|
||||
return
|
||||
}
|
||||
if req.PageNum == 0 {
|
||||
req.PageNum = 1
|
||||
}
|
||||
page = req.PageNum
|
||||
if req.PageSize == 0 {
|
||||
req.PageSize = service.AdminPageNum
|
||||
}
|
||||
|
||||
list, err = model.Page(page, req.PageSize).Order("id asc").All()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("获取数据失败")
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//获取用户组(角色)列表
|
||||
func GetList() (list []*Entity, err error) {
|
||||
cache := cache_service.New()
|
||||
@@ -33,8 +98,7 @@ func GetList() (list []*Entity, err error) {
|
||||
|
||||
func checkRoleData(params map[string]interface{}) error {
|
||||
rules := []string{
|
||||
"name@required|length:1,20#请填写角色名称|名称应在:min到:max个字符之间",
|
||||
"parent_id@integer|min:0#父级ID必须为整数|父级ID必须大于等于0",
|
||||
"roleName@required|length:1,20#请填写角色名称|名称应在:min到:max个字符之间",
|
||||
}
|
||||
|
||||
e := gvalid.CheckMap(params, rules)
|
||||
@@ -53,12 +117,11 @@ func Add(tx *gdb.TX, data map[string]interface{}) (InsId int64, err error) {
|
||||
//保存角色信息
|
||||
now := gtime.Timestamp()
|
||||
roleMap := gdb.Map{
|
||||
"parent_id": data["parent_id"],
|
||||
"status": data["status"],
|
||||
"name": data["name"],
|
||||
"name": data["roleName"],
|
||||
"create_time": now,
|
||||
"update_time": now,
|
||||
"list_order": data["list_order"],
|
||||
"list_order": data["roleSort"],
|
||||
"remark": data["remark"],
|
||||
}
|
||||
var res sql.Result
|
||||
@@ -72,7 +135,7 @@ func Add(tx *gdb.TX, data map[string]interface{}) (InsId int64, err error) {
|
||||
|
||||
//修改角色信息操作
|
||||
func Edit(tx *gdb.TX, data map[string]interface{}) (err error) {
|
||||
if _, k := data["id"]; !k {
|
||||
if _, k := data["roleId"]; !k {
|
||||
err = errors.New("缺少更新条件Id")
|
||||
return
|
||||
}
|
||||
@@ -83,12 +146,11 @@ func Edit(tx *gdb.TX, data map[string]interface{}) (err error) {
|
||||
//保存角色信息
|
||||
now := gtime.Timestamp()
|
||||
roleMap := gdb.Map{
|
||||
"id": data["id"],
|
||||
"parent_id": data["parent_id"],
|
||||
"id": data["roleId"],
|
||||
"status": data["status"],
|
||||
"name": data["name"],
|
||||
"name": data["roleName"],
|
||||
"update_time": now,
|
||||
"list_order": data["list_order"],
|
||||
"list_order": data["roleSort"],
|
||||
"remark": data["remark"],
|
||||
}
|
||||
_, err = tx.Table(Table).Data(roleMap).Save()
|
||||
@@ -98,6 +160,61 @@ func Edit(tx *gdb.TX, data map[string]interface{}) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
//设置角色状态
|
||||
func StatusSetRole(req *StatusSetReq) error {
|
||||
if req != nil {
|
||||
entity, err := Model.Where("id", req.RoleId).One()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return gerror.New("获取角色信息失败")
|
||||
}
|
||||
entity.Status = req.Status
|
||||
_, err = entity.Update()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return gerror.New("设置状态失败")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
//设置角色数据权限
|
||||
func DataScope(req *DataScopeReq) error {
|
||||
tx, err := g.DB().Begin()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("设置失败")
|
||||
return err
|
||||
}
|
||||
_, err = tx.Table(Table).Where("id", req.RoleId).Data(g.Map{"data_scope": req.DataScope}).Update()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
tx.Rollback()
|
||||
return gerror.New("设置失败")
|
||||
}
|
||||
if req.DataScope == 2 {
|
||||
_, err := tx.Table(role_dept.Table).Delete(role_dept.Columns.RoleId, req.RoleId)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
tx.Rollback()
|
||||
return gerror.New("设置失败")
|
||||
}
|
||||
//自定义数据权限
|
||||
data := g.List{}
|
||||
for _, deptId := range req.DeptIds {
|
||||
data = append(data, g.Map{role_dept.Columns.RoleId: req.RoleId, role_dept.Columns.DeptId: deptId})
|
||||
}
|
||||
_, err = tx.Table(role_dept.Table).Data(data).Insert()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
tx.Rollback()
|
||||
return gerror.New("设置失败")
|
||||
}
|
||||
}
|
||||
tx.Commit()
|
||||
return nil
|
||||
}
|
||||
|
||||
//删除角色权限操作
|
||||
func DeleteRoleRule(roleId int) (err error) {
|
||||
enforcer, e := casbin_adapter_service.GetEnforcer()
|
||||
@@ -147,7 +264,7 @@ func DeleteByIds(ids []int) (err error) {
|
||||
err = gerror.New("删除失败")
|
||||
return
|
||||
}
|
||||
//删除角色的权限
|
||||
//删除角色的权限和管理的部门数据权限
|
||||
for _, v := range ids {
|
||||
err = DeleteRoleRule(v)
|
||||
if err != nil {
|
||||
@@ -156,6 +273,13 @@ func DeleteByIds(ids []int) (err error) {
|
||||
err = gerror.New("删除失败")
|
||||
return
|
||||
}
|
||||
_, err = tx.Table(role_dept.Table).Delete(role_dept.Columns.RoleId, v)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
tx.Rollback()
|
||||
err = gerror.New("删除失败")
|
||||
return
|
||||
}
|
||||
}
|
||||
tx.Commit()
|
||||
return
|
||||
|
||||
@@ -11,14 +11,14 @@ import (
|
||||
|
||||
// Entity is the golang structure for table _role.
|
||||
type Entity struct {
|
||||
Id int `orm:"id,primary" json:"id"` //
|
||||
ParentId int `orm:"parent_id" json:"parent_id"` // 父角色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"` // 备注
|
||||
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:本部门及以下数据权限)
|
||||
}
|
||||
|
||||
// Role is alias of Entity, which some developers say they just want.
|
||||
|
||||
@@ -13,7 +13,7 @@ import (
|
||||
|
||||
// arModel is a active record design model for table _role operations.
|
||||
type arModel struct {
|
||||
Model *gdb.Model
|
||||
M *gdb.Model
|
||||
}
|
||||
|
||||
var (
|
||||
@@ -25,59 +25,59 @@ var (
|
||||
|
||||
// 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)}
|
||||
return &arModel{m.M.LeftJoin(joinTable, on)}
|
||||
}
|
||||
|
||||
// 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)}
|
||||
return &arModel{m.M.RightJoin(joinTable, on)}
|
||||
}
|
||||
|
||||
// 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)}
|
||||
return &arModel{m.M.InnerJoin(joinTable, on)}
|
||||
}
|
||||
|
||||
// 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 +92,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)}
|
||||
return &arModel{m.M.GroupBy(groupBy)}
|
||||
}
|
||||
|
||||
// OrderBy sets the "ORDER BY" statement for the model.
|
||||
func (m *arModel) OrderBy(orderBy string) *arModel {
|
||||
return &arModel{m.Model.OrderBy(orderBy)}
|
||||
return &arModel{m.M.OrderBy(orderBy)}
|
||||
}
|
||||
|
||||
// Limit sets the "LIMIT" statement for the model.
|
||||
@@ -120,25 +120,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.
|
||||
// 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.ForPage(page, limit)}
|
||||
return &arModel{m.M.ForPage(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
|
||||
@@ -154,7 +154,7 @@ func (m *arModel) Batch(batch int) *arModel {
|
||||
//
|
||||
// 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...)}
|
||||
return &arModel{m.M.Cache(expire, name...)}
|
||||
}
|
||||
|
||||
// Data sets the operation data for the model.
|
||||
@@ -165,46 +165,46 @@ 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...)}
|
||||
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.Model.Insert()
|
||||
return m.M.Insert()
|
||||
}
|
||||
|
||||
// Replace does "REPLACE INTO ..." statement for the model.
|
||||
func (m *arModel) Replace() (result sql.Result, err error) {
|
||||
return m.Model.Replace()
|
||||
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.Model.Save()
|
||||
return m.M.Save()
|
||||
}
|
||||
|
||||
// Update does "UPDATE ... " statement for the model.
|
||||
func (m *arModel) Update() (result sql.Result, err error) {
|
||||
return m.Model.Update()
|
||||
return m.M.Update()
|
||||
}
|
||||
|
||||
// Delete does "DELETE FROM ... " statement for the model.
|
||||
func (m *arModel) Delete() (result sql.Result, err error) {
|
||||
return m.Model.Delete()
|
||||
return m.M.Delete()
|
||||
}
|
||||
|
||||
// Count does "SELECT COUNT(x) FROM ..." statement for the model.
|
||||
func (m *arModel) Count() (int, error) {
|
||||
return m.Model.Count()
|
||||
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.Model.All()
|
||||
all, err := m.M.All()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -218,7 +218,7 @@ 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()
|
||||
one, err := m.M.One()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -232,12 +232,12 @@ func (m *arModel) One() (*Entity, error) {
|
||||
// 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()
|
||||
return m.M.Value()
|
||||
}
|
||||
|
||||
// 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 +246,15 @@ func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error)
|
||||
return callback(entities, err)
|
||||
})
|
||||
}
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Order sets the "ORDER BY" statement for the model.
|
||||
func (m *arModel) Order(orderBy string) *arModel {
|
||||
return &arModel{m.M.Order(orderBy)}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
// ============================================================================
|
||||
// This is auto-generated by gf cli tool only once. Fill this file as you wish.
|
||||
// ============================================================================
|
||||
|
||||
package role_dept
|
||||
|
||||
// Fill with you ideas below.
|
||||
|
||||
//获取角色的部门数据
|
||||
func GetRoleDepts(roleId int64) ([]int64, error) {
|
||||
entity, err := Model.All(Columns.RoleId, roleId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
d := make([]int64, len(entity))
|
||||
for k, v := range entity {
|
||||
d[k] = v.DeptId
|
||||
}
|
||||
return d, nil
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
// ==========================================================================
|
||||
// This is auto-generated by gf cli tool. You may not really want to edit it.
|
||||
// ==========================================================================
|
||||
|
||||
package role_dept
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"github.com/gogf/gf/database/gdb"
|
||||
)
|
||||
|
||||
// Entity is the golang structure for table role_dept.
|
||||
type Entity struct {
|
||||
RoleId int64 `orm:"role_id,primary" json:"role_id"` // 角色ID
|
||||
DeptId int64 `orm:"dept_id,primary" json:"dept_id"` // 部门ID
|
||||
}
|
||||
|
||||
// OmitEmpty sets OPTION_OMITEMPTY option for the model, which automatically filers
|
||||
// the data and where attributes for empty values.
|
||||
func (r *Entity) OmitEmpty() *arModel {
|
||||
return Model.Data(r).OmitEmpty()
|
||||
}
|
||||
|
||||
// Inserts does "INSERT...INTO..." statement for inserting current object into table.
|
||||
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.
|
||||
func (r *Entity) Replace() (result sql.Result, err error) {
|
||||
return Model.Data(r).Replace()
|
||||
}
|
||||
|
||||
// Save does "INSERT...INTO..." statement for inserting/updating current object into table.
|
||||
// It updates the record if there's already another same record in the table
|
||||
// (it checks using primary key or unique index).
|
||||
func (r *Entity) Save() (result sql.Result, err error) {
|
||||
return Model.Data(r).Save()
|
||||
}
|
||||
|
||||
// Update does "UPDATE...WHERE..." statement for updating current object from table.
|
||||
// It updates the record if there's already another same record in the table
|
||||
// (it checks using primary key or unique index).
|
||||
func (r *Entity) Update() (result sql.Result, err error) {
|
||||
return Model.Data(r).Where(gdb.GetWhereConditionOfStruct(r)).Update()
|
||||
}
|
||||
|
||||
// Delete does "DELETE FROM...WHERE..." statement for deleting current object from table.
|
||||
func (r *Entity) Delete() (result sql.Result, err error) {
|
||||
return Model.Where(gdb.GetWhereConditionOfStruct(r)).Delete()
|
||||
}
|
||||
@@ -0,0 +1,345 @@
|
||||
// ==========================================================================
|
||||
// This is auto-generated by gf cli tool. You may not really want to edit it.
|
||||
// ==========================================================================
|
||||
|
||||
package role_dept
|
||||
|
||||
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_dept operations.
|
||||
type arModel struct {
|
||||
gmvc.M
|
||||
}
|
||||
|
||||
var (
|
||||
// Table is the table name of role_dept.
|
||||
Table = "role_dept"
|
||||
// Model is the model object of role_dept.
|
||||
Model = &arModel{g.DB("default").Table(Table).Safe()}
|
||||
// Columns defines and stores column names for table role_dept.
|
||||
Columns = struct {
|
||||
RoleId string // 角色ID
|
||||
DeptId string // 部门ID
|
||||
}{
|
||||
RoleId: "role_id",
|
||||
DeptId: "dept_id",
|
||||
}
|
||||
)
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Master marks the following operation on master node.
|
||||
func (m *arModel) Master() *arModel {
|
||||
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.M.Slave()}
|
||||
}
|
||||
|
||||
// LeftJoin does "LEFT JOIN ... ON ..." statement on the model.
|
||||
// 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.
|
||||
// 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.
|
||||
// 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.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.M.FieldsEx(fields)}
|
||||
}
|
||||
|
||||
// Option sets the extra operation option for the model.
|
||||
func (m *arModel) Option(option int) *arModel {
|
||||
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.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.M.Filter()}
|
||||
}
|
||||
|
||||
// Where sets the condition statement for the model. The parameter <where> can be type of
|
||||
// string/map/gmap/slice/struct/*struct, etc. Note that, if it's called more than one times,
|
||||
// multiple conditions will be joined into where statement using "AND".
|
||||
// Eg:
|
||||
// Where("uid=10000")
|
||||
// Where("uid", 10000)
|
||||
// Where("money>? AND name like ?", 99999, "vip_%")
|
||||
// Where("uid", 1).Where("name", "john")
|
||||
// Where("status IN (?)", g.Slice{1,2,3})
|
||||
// Where("age IN(?,?)", 18, 50)
|
||||
// Where(User{ Id : 1, UserName : "john"})
|
||||
func (m *arModel) Where(where interface{}, args ...interface{}) *arModel {
|
||||
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.M.And(where, args...)}
|
||||
}
|
||||
|
||||
// Or adds "OR" condition to the where statement.
|
||||
func (m *arModel) Or(where interface{}, args ...interface{}) *arModel {
|
||||
return &arModel{m.M.Or(where, args...)}
|
||||
}
|
||||
|
||||
// Group sets the "GROUP BY" statement for the model.
|
||||
func (m *arModel) Group(groupBy string) *arModel {
|
||||
return &arModel{m.M.Group(groupBy)}
|
||||
}
|
||||
|
||||
// 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.
|
||||
// The parameter <limit> can be either one or two number, if passed two number is passed,
|
||||
// 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.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.M.Offset(offset)}
|
||||
}
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Batch sets the batch operation number for the model.
|
||||
func (m *arModel) Batch(batch int) *arModel {
|
||||
return &arModel{m.M.Batch(batch)}
|
||||
}
|
||||
|
||||
// Cache sets the cache feature for the model. It caches the result of the sql, which means
|
||||
// if there's another same sql request, it just reads and returns the result from cache, it
|
||||
// but not committed and executed into the database.
|
||||
//
|
||||
// If the parameter <duration> < 0, which means it clear the cache with given <name>.
|
||||
// If the parameter <duration> = 0, which means it never expires.
|
||||
// If the parameter <duration> > 0, which means it expires after <duration>.
|
||||
//
|
||||
// The optional parameter <name> is used to bind a name to the cache, which means you can later
|
||||
// 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(duration time.Duration, name ...string) *arModel {
|
||||
return &arModel{m.M.Cache(duration, name...)}
|
||||
}
|
||||
|
||||
// Data sets the operation data for the model.
|
||||
// The parameter <data> can be type of string/map/gmap/slice/struct/*struct, etc.
|
||||
// Eg:
|
||||
// Data("uid=10000")
|
||||
// Data("uid", 10000)
|
||||
// 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.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.
|
||||
//
|
||||
// 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
|
||||
}
|
||||
var entities []*Entity
|
||||
if err = all.Structs(&entities); err != nil && err != sql.ErrNoRows {
|
||||
return nil, err
|
||||
}
|
||||
return entities, nil
|
||||
}
|
||||
|
||||
// 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.
|
||||
//
|
||||
// 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
|
||||
}
|
||||
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.M.Chunk(limit, func(result gdb.Result, err error) bool {
|
||||
var entities []*Entity
|
||||
err = result.Structs(&entities)
|
||||
if err == sql.ErrNoRows {
|
||||
return false
|
||||
}
|
||||
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()}
|
||||
}
|
||||
@@ -32,7 +32,7 @@ type SelectPageReq struct {
|
||||
ConfigType string `p:"configType"` //状态
|
||||
BeginTime string `p:"beginTime"` //开始时间
|
||||
EndTime string `p:"endTime"` //结束时间
|
||||
PageNum int `p:"page"` //当前页码
|
||||
PageNum int `p:"pageNum"` //当前页码
|
||||
PageSize int `p:"pageSize"` //每页数
|
||||
}
|
||||
|
||||
@@ -44,7 +44,9 @@ func AddSave(req *AddReq, userId int) (id int64, err error) {
|
||||
entity.ConfigType = req.ConfigType
|
||||
entity.ConfigValue = req.ConfigValue
|
||||
entity.Remark = req.Remark
|
||||
entity.CreateTime = gconv.Uint64(gtime.Timestamp())
|
||||
time := gconv.Uint64(gtime.Timestamp())
|
||||
entity.CreateTime = time
|
||||
entity.UpdateTime = time
|
||||
entity.CreateBy = gconv.Uint(userId)
|
||||
result, err := entity.Insert()
|
||||
if err != nil {
|
||||
@@ -119,17 +121,17 @@ func SelectListByPage(req *SelectPageReq) (total, page int, list []*Entity, err
|
||||
model = model.Where("config_name like ?", "%"+req.ConfigName+"%")
|
||||
}
|
||||
if req.ConfigType != "" {
|
||||
model.Where("status = ", gconv.Int(req.ConfigType))
|
||||
model = model.Where("status = ", gconv.Int(req.ConfigType))
|
||||
}
|
||||
if req.ConfigKey != "" {
|
||||
model.Where("config_key like ?", "%"+req.ConfigKey+"%")
|
||||
model = model.Where("config_key like ?", "%"+req.ConfigKey+"%")
|
||||
}
|
||||
if req.BeginTime != "" {
|
||||
model = model.Where("create_time >= ? ", utils.StrToTimestamp(req.BeginTime))
|
||||
}
|
||||
|
||||
if req.EndTime != "" {
|
||||
model = model.Where("create_time<=?", utils.StrToTimestamp(req.EndTime))
|
||||
model = model.Where("create_time<=?", utils.StrToTimestamp(req.EndTime))
|
||||
}
|
||||
}
|
||||
total, err = model.Count()
|
||||
|
||||
@@ -0,0 +1,213 @@
|
||||
// ============================================================================
|
||||
// This is auto-generated by gf cli tool only once. Fill this file as you wish.
|
||||
// ============================================================================
|
||||
|
||||
package sys_dept
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"github.com/gogf/gf/errors/gerror"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/os/gtime"
|
||||
)
|
||||
|
||||
//数据列表数据结构
|
||||
type Dept struct {
|
||||
SearchValue interface{} `json:"searchValue"`
|
||||
CreateBy string `json:"createBy" orm:"create_by"`
|
||||
CreateTime *gtime.Time `json:"createTime" orm:"create_time"`
|
||||
UpdateBy string `json:"updateBy" orm:"update_by"`
|
||||
UpdateTime *gtime.Time `json:"updateTime" orm:"update_time"`
|
||||
Remark string `json:"remark"`
|
||||
DataScope interface{} `json:"dataScope"`
|
||||
Params map[string]interface{} `json:"params"`
|
||||
DeptID int64 `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"`
|
||||
OrderNum int `json:"orderNum" orm:"order_num" `
|
||||
Leader string `json:"leader" orm:"leader"`
|
||||
Phone string `json:"phone" orm:"phone"`
|
||||
Email string `json:"email" orm:"email"`
|
||||
Status string `json:"status" orm:"status"`
|
||||
DelFlag string `json:"delFlag" orm:"del_flag" `
|
||||
ParentName string `json:"parentName"`
|
||||
Children []interface{} `json:"children"`
|
||||
}
|
||||
|
||||
//查询参数
|
||||
|
||||
//文章搜索参数
|
||||
type SearchParams struct {
|
||||
DeptName string `p:"deptName"`
|
||||
Status string `p:"status"`
|
||||
}
|
||||
|
||||
type AddParams struct {
|
||||
ParentID int `json:"parentId" orm:"parent_id" p:"parentId" v:"required#父级不能为空"`
|
||||
DeptName string `json:"deptName" orm:"dept_name" p:"deptName" v:"required#部门名称不能为空"`
|
||||
OrderNum int `json:"orderNum" orm:"order_num" p:"orderNum" v:"required#排序不能为空"`
|
||||
Leader string `json:"leader" orm:"leader" p:"leader" v:"required#负责人不能为空"`
|
||||
Phone string `json:"phone" orm:"Phone" p:"phone" v:"required#电话不能为空"`
|
||||
Email string `json:"email" orm:"email" p:"email" v:"required#邮箱不能为空"`
|
||||
Status string `json:"status" orm:"status" p:"status" v:"required#状态必须"`
|
||||
Ancestors string `json:"ancestors" orm:"ancestors"`
|
||||
DelFlag string `json:"delFlag" orm:"del_flag"`
|
||||
CreateBy string `json:"createBy" orm:"create_by"`
|
||||
CreateTime *gtime.Time `json:"createTime" orm:"create_time"`
|
||||
UpdateBy string `json:"updateBy" orm:"update_by"`
|
||||
UpdateTime *gtime.Time `json:"updateTime" orm:"update_time"`
|
||||
}
|
||||
|
||||
type EditParams struct {
|
||||
DeptID int64 `json:"deptId" orm:"dept_id" p:"id" v:"integer|min:1#ID只能为整数|ID只能为正数"`
|
||||
AddParams
|
||||
}
|
||||
|
||||
//获取列表数据
|
||||
func GetList(searchParams *SearchParams) ([]*Dept, error) {
|
||||
model := g.DB().Table(Table)
|
||||
if searchParams.DeptName != "" {
|
||||
model.Where("dept_name like ?", "%"+searchParams.DeptName+"%")
|
||||
}
|
||||
|
||||
if searchParams.Status != "" {
|
||||
model.Where("status", searchParams.Status)
|
||||
}
|
||||
depts := ([]*Dept)(nil)
|
||||
if err := model.Structs(&depts); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, v := range depts {
|
||||
if v.Children == nil {
|
||||
v.Children = []interface{}{}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return depts, nil
|
||||
}
|
||||
|
||||
//添加
|
||||
func AddDept(data *AddParams) (sql.Result, error) {
|
||||
data.DelFlag = "0"
|
||||
data.CreateBy = ""
|
||||
data.CreateTime = gtime.Now()
|
||||
return Model.Data(data).Insert()
|
||||
}
|
||||
|
||||
//编辑
|
||||
func EditDept(data *EditParams) error {
|
||||
data.UpdateBy = ""
|
||||
data.UpdateTime = gtime.Now()
|
||||
|
||||
if _, err := Model.Where("dept_id", data.DeptID).Data(data).Update(); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
//删除失败
|
||||
func DelDept(id int64) error {
|
||||
|
||||
ids, _ := GetChilderenIds(id)
|
||||
_, err := Model.Where("dept_id IN(?)", ids).Delete()
|
||||
if err != nil {
|
||||
return gerror.New("删除失败")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
//根据部门id获取部门信息
|
||||
func GetDeptById(id int64) (*Dept, error) {
|
||||
|
||||
dept := (*Dept)(nil)
|
||||
|
||||
if err := Model.Where("dept_id", id).Struct(&dept); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return dept, nil
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
获取排除节点
|
||||
*/
|
||||
func Exclude(id int64) ([]*Dept, error) {
|
||||
ids, err := GetChilderenIds(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
model := g.DB().Table(Table)
|
||||
if len(ids) > 0 {
|
||||
model.Where("dept_id NOT IN(?)", ids)
|
||||
}
|
||||
|
||||
depts := ([]*Dept)(nil)
|
||||
if err := model.Structs(&depts); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, v := range depts {
|
||||
if v.Children == nil {
|
||||
v.Children = []interface{}{}
|
||||
}
|
||||
|
||||
}
|
||||
return depts, nil
|
||||
}
|
||||
|
||||
/**
|
||||
根据id获取子孙节点id集合包含本身
|
||||
*/
|
||||
func GetChilderenIds(id int64) ([]int64, error) {
|
||||
|
||||
list, err := GetChildrenById(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(list) == 0 {
|
||||
return []int64{}, nil
|
||||
}
|
||||
var newResult []int64
|
||||
for _, v := range list {
|
||||
newResult = append(newResult, v.DeptId)
|
||||
}
|
||||
|
||||
return newResult, nil
|
||||
}
|
||||
|
||||
/**
|
||||
根据id获取所有子孙节点包含本身
|
||||
*/
|
||||
func GetChildrenById(id int64) ([]*Entity, error) {
|
||||
depts, err := Model.All()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := recursion(id, depts, true)
|
||||
return result, nil
|
||||
}
|
||||
|
||||
/**
|
||||
根据id获取所有子孙元素
|
||||
|
||||
hasroot true - 包含自身 false - 不含自身
|
||||
*/
|
||||
func recursion(id int64, depts []*Entity, hasRoot bool) (result []*Entity) {
|
||||
for _, v := range depts {
|
||||
if hasRoot == true && v.DeptId == id {
|
||||
result = append(result, v)
|
||||
}
|
||||
if v.ParentId == id {
|
||||
data := recursion(v.DeptId, depts, false)
|
||||
result = append(result, v)
|
||||
result = append(result, data...)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
// ==========================================================================
|
||||
// This is auto-generated by gf cli tool. You may not really want to edit it.
|
||||
// ==========================================================================
|
||||
|
||||
package sys_dept
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"github.com/gogf/gf/database/gdb"
|
||||
"github.com/gogf/gf/os/gtime"
|
||||
)
|
||||
|
||||
// Entity is the golang structure for table sys_dept.
|
||||
type Entity struct {
|
||||
DeptId int64 `orm:"dept_id,primary" json:"dept_id"` // 部门id
|
||||
ParentId int64 `orm:"parent_id" json:"parent_id"` // 父部门id
|
||||
Ancestors string `orm:"ancestors" json:"ancestors"` // 祖级列表
|
||||
DeptName string `orm:"dept_name" json:"dept_name"` // 部门名称
|
||||
OrderNum int `orm:"order_num" json:"order_num"` // 显示顺序
|
||||
Leader string `orm:"leader" json:"leader"` // 负责人
|
||||
Phone string `orm:"phone" json:"phone"` // 联系电话
|
||||
Email string `orm:"email" json:"email"` // 邮箱
|
||||
Status string `orm:"status" json:"status"` // 部门状态(0正常 1停用)
|
||||
DelFlag string `orm:"del_flag" json:"del_flag"` // 删除标志(0代表存在 2代表删除)
|
||||
CreateBy string `orm:"create_by" json:"create_by"` // 创建者
|
||||
CreateTime *gtime.Time `orm:"create_time" json:"create_time"` // 创建时间
|
||||
UpdateBy string `orm:"update_by" json:"update_by"` // 更新者
|
||||
UpdateTime *gtime.Time `orm:"update_time" json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
// OmitEmpty sets OPTION_OMITEMPTY option for the model, which automatically filers
|
||||
// the data and where attributes for empty values.
|
||||
func (r *Entity) OmitEmpty() *arModel {
|
||||
return Model.Data(r).OmitEmpty()
|
||||
}
|
||||
|
||||
// Inserts does "INSERT...INTO..." statement for inserting current object into table.
|
||||
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.
|
||||
func (r *Entity) Replace() (result sql.Result, err error) {
|
||||
return Model.Data(r).Replace()
|
||||
}
|
||||
|
||||
// Save does "INSERT...INTO..." statement for inserting/updating current object into table.
|
||||
// It updates the record if there's already another same record in the table
|
||||
// (it checks using primary key or unique index).
|
||||
func (r *Entity) Save() (result sql.Result, err error) {
|
||||
return Model.Data(r).Save()
|
||||
}
|
||||
|
||||
// Update does "UPDATE...WHERE..." statement for updating current object from table.
|
||||
// It updates the record if there's already another same record in the table
|
||||
// (it checks using primary key or unique index).
|
||||
func (r *Entity) Update() (result sql.Result, err error) {
|
||||
return Model.Data(r).Where(gdb.GetWhereConditionOfStruct(r)).Update()
|
||||
}
|
||||
|
||||
// Delete does "DELETE FROM...WHERE..." statement for deleting current object from table.
|
||||
func (r *Entity) Delete() (result sql.Result, err error) {
|
||||
return Model.Where(gdb.GetWhereConditionOfStruct(r)).Delete()
|
||||
}
|
||||
@@ -0,0 +1,352 @@
|
||||
// ==========================================================================
|
||||
// This is auto-generated by gf cli tool. You may not really want to edit it.
|
||||
// ==========================================================================
|
||||
|
||||
package sys_dept
|
||||
|
||||
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_dept operations.
|
||||
type arModel struct {
|
||||
gmvc.M
|
||||
}
|
||||
|
||||
var (
|
||||
// Table is the table name of sys_dept.
|
||||
Table = "sys_dept"
|
||||
// Model is the model object of sys_dept.
|
||||
Model = &arModel{g.DB("default").Table(Table).Safe()}
|
||||
// Columns defines and stores column names for table sys_dept.
|
||||
Columns = struct {
|
||||
DeptId string // 部门id
|
||||
ParentId string // 父部门id
|
||||
Ancestors string // 祖级列表
|
||||
DeptName string // 部门名称
|
||||
OrderNum string // 显示顺序
|
||||
Leader string // 负责人
|
||||
Phone string // 联系电话
|
||||
Email string // 邮箱
|
||||
Status string // 部门状态(0正常 1停用)
|
||||
DelFlag string // 删除标志(0代表存在 2代表删除)
|
||||
CreateBy string // 创建者
|
||||
CreateTime string // 创建时间
|
||||
UpdateBy string // 更新者
|
||||
UpdateTime string // 更新时间
|
||||
}{
|
||||
DeptId: "dept_id",
|
||||
ParentId: "parent_id",
|
||||
Ancestors: "ancestors",
|
||||
DeptName: "dept_name",
|
||||
OrderNum: "order_num",
|
||||
Leader: "leader",
|
||||
Phone: "phone",
|
||||
Email: "email",
|
||||
Status: "status",
|
||||
DelFlag: "del_flag",
|
||||
CreateBy: "create_by",
|
||||
CreateTime: "create_time",
|
||||
UpdateBy: "update_by",
|
||||
UpdateTime: "update_time",
|
||||
}
|
||||
)
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Master marks the following operation on master node.
|
||||
func (m *arModel) Master() *arModel {
|
||||
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.M.Slave()}
|
||||
}
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Fields sets the operation fields of the model, multiple fields joined using char ','.
|
||||
func (m *arModel) Fields(fields string) *arModel {
|
||||
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.M.FieldsEx(fields)}
|
||||
}
|
||||
|
||||
// Option sets the extra operation option for the model.
|
||||
func (m *arModel) Option(option int) *arModel {
|
||||
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.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.M.Filter()}
|
||||
}
|
||||
|
||||
// Where sets the condition statement for the model. The parameter <where> can be type of
|
||||
// string/map/gmap/slice/struct/*struct, etc. Note that, if it's called more than one times,
|
||||
// multiple conditions will be joined into where statement using "AND".
|
||||
// Eg:
|
||||
// Where("uid=10000")
|
||||
// Where("uid", 10000)
|
||||
// Where("money>? AND name like ?", 99999, "vip_%")
|
||||
// Where("uid", 1).Where("name", "john")
|
||||
// Where("status IN (?)", g.Slice{1,2,3})
|
||||
// Where("age IN(?,?)", 18, 50)
|
||||
// Where(User{ Id : 1, UserName : "john"})
|
||||
func (m *arModel) Where(where interface{}, args ...interface{}) *arModel {
|
||||
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.M.And(where, args...)}
|
||||
}
|
||||
|
||||
// Or adds "OR" condition to the where statement.
|
||||
func (m *arModel) Or(where interface{}, args ...interface{}) *arModel {
|
||||
return &arModel{m.M.Or(where, args...)}
|
||||
}
|
||||
|
||||
// Group sets the "GROUP BY" statement for the model.
|
||||
func (m *arModel) Group(groupBy string) *arModel {
|
||||
return &arModel{m.M.Group(groupBy)}
|
||||
}
|
||||
|
||||
// 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.
|
||||
// The parameter <limit> can be either one or two number, if passed two number is passed,
|
||||
// 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.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.M.Offset(offset)}
|
||||
}
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Batch sets the batch operation number for the model.
|
||||
func (m *arModel) Batch(batch int) *arModel {
|
||||
return &arModel{m.M.Batch(batch)}
|
||||
}
|
||||
|
||||
// Cache sets the cache feature for the model. It caches the result of the sql, which means
|
||||
// if there's another same sql request, it just reads and returns the result from cache, it
|
||||
// but not committed and executed into the database.
|
||||
//
|
||||
// If the parameter <duration> < 0, which means it clear the cache with given <name>.
|
||||
// If the parameter <duration> = 0, which means it never expires.
|
||||
// If the parameter <duration> > 0, which means it expires after <duration>.
|
||||
//
|
||||
// The optional parameter <name> is used to bind a name to the cache, which means you can later
|
||||
// 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(duration time.Duration, name ...string) *arModel {
|
||||
return &arModel{m.M.Cache(duration, name...)}
|
||||
}
|
||||
|
||||
// Data sets the operation data for the model.
|
||||
// The parameter <data> can be type of string/map/gmap/slice/struct/*struct, etc.
|
||||
// Eg:
|
||||
// Data("uid=10000")
|
||||
// Data("uid", 10000)
|
||||
// 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.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.
|
||||
//
|
||||
// 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
|
||||
}
|
||||
var entities []*Entity
|
||||
if err = all.Structs(&entities); err != nil && err != sql.ErrNoRows {
|
||||
return nil, err
|
||||
}
|
||||
return entities, nil
|
||||
}
|
||||
|
||||
// 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.
|
||||
//
|
||||
// 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
|
||||
}
|
||||
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.M.Chunk(limit, func(result gdb.Result, err error) bool {
|
||||
var entities []*Entity
|
||||
err = result.Structs(&entities)
|
||||
if err == sql.ErrNoRows {
|
||||
return false
|
||||
}
|
||||
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()}
|
||||
}
|
||||
@@ -17,7 +17,7 @@ type AddDataReq struct {
|
||||
DictType string `p:"dictType" v:"required#字典类型不能为空"`
|
||||
DictSort int `p:"dictSort" v:"integer#排序只能为整数"`
|
||||
CssClass string `p:"cssClass"`
|
||||
ListClass string `p:"listClass" v:"required#回显样式不能为空"`
|
||||
ListClass string `p:"listClass"`
|
||||
IsDefault int `p:"isDefault" v:"required|in:0,1#系统默认不能为空|默认值只能为0或1"`
|
||||
Status int `p:"status" v:"required|in:0,1#状态不能为空|状态只能为0或1"`
|
||||
Remark string `p:"remark"`
|
||||
@@ -30,10 +30,10 @@ type EditDataReq struct {
|
||||
|
||||
//分页请求参数
|
||||
type SelectDataPageReq struct {
|
||||
DictType string `p:"dictType"` //字典名称
|
||||
DictType string `p:"dictType"` //字典类型
|
||||
DictLabel string `p:"dictLabel"` //字典标签
|
||||
Status string `p:"status"` //状态
|
||||
PageNum int `p:"page"` //当前页码
|
||||
PageNum int `p:"pageNum"` //当前页码
|
||||
PageSize int `p:"pageSize"` //每页数
|
||||
}
|
||||
|
||||
@@ -49,7 +49,9 @@ func AddSaveData(req *AddDataReq, userId int) (int64, error) {
|
||||
entity.IsDefault = req.IsDefault
|
||||
entity.ListClass = req.ListClass
|
||||
entity.Remark = req.Remark
|
||||
entity.CreateTime = gconv.Uint64(gtime.Timestamp())
|
||||
time := gconv.Uint64(gtime.Timestamp())
|
||||
entity.CreateTime = time
|
||||
entity.UpdateTime = time
|
||||
entity.CreateBy = userId
|
||||
result, err := entity.Insert()
|
||||
if err != nil {
|
||||
|
||||
@@ -2,6 +2,7 @@ package sys_dict_type
|
||||
|
||||
import (
|
||||
"gfast/app/model/admin/sys_dict_data"
|
||||
"gfast/app/service/cache_service"
|
||||
"gfast/library/service"
|
||||
"gfast/library/utils"
|
||||
"github.com/gogf/gf/errors/gerror"
|
||||
@@ -34,7 +35,7 @@ type SelectPageReq struct {
|
||||
Status string `p:"status"` //字典状态
|
||||
BeginTime string `p:"beginTime"` //开始时间
|
||||
EndTime string `p:"endTime"` //结束时间
|
||||
PageNum int `p:"page"` //当前页码
|
||||
PageNum int `p:"PageNum"` //当前页码
|
||||
PageSize int `p:"pageSize"` //每页数
|
||||
}
|
||||
|
||||
@@ -168,7 +169,20 @@ func SelectListByPage(req *SelectPageReq) (total, page int, list []*Entity, err
|
||||
|
||||
//通过字典键类型获取选项
|
||||
func GetDictWithDataByType(dictType, defaultValue, emptyLabel string) (dict g.Map, err error) {
|
||||
dictEntity, err := Model.FindOne("dict_type", dictType)
|
||||
//初始化dict的值
|
||||
dict = g.Map{
|
||||
"dict_name": "",
|
||||
"remark": "",
|
||||
"values": g.Slice{},
|
||||
}
|
||||
cache := cache_service.New()
|
||||
//从缓存获取
|
||||
data := cache.Get(gconv.String(cache_service.AdminConfigDict) + "_" + dictType)
|
||||
if data != nil {
|
||||
dict = data.(g.Map)
|
||||
return
|
||||
}
|
||||
dictEntity, err := Model.FindOne(g.Map{"dict_type": dictType, "status": 1})
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("获取字典选项失败")
|
||||
@@ -198,6 +212,7 @@ func GetDictWithDataByType(dictType, defaultValue, emptyLabel string) (dict g.Ma
|
||||
"key": v.DictValue,
|
||||
"value": v.DictLabel,
|
||||
"isDefault": isDefault,
|
||||
"remark": v.Remark,
|
||||
}
|
||||
}
|
||||
if emptyLabel != "" {
|
||||
@@ -208,6 +223,8 @@ func GetDictWithDataByType(dictType, defaultValue, emptyLabel string) (dict g.Ma
|
||||
"remark": dictEntity.Remark,
|
||||
"values": values,
|
||||
}
|
||||
//缓存
|
||||
cache.Set(gconv.String(cache_service.AdminConfigDict)+"_"+dictType, dict, 0, cache_service.AdminSysConfigTag)
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -226,3 +243,9 @@ func DeleteDictByIds(ids []int) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
//获取所有字典类型
|
||||
func GetAllDictType() (list []*Entity, err error) {
|
||||
list, err = Model.Where("status", 1).Order("dict_id ASC").All()
|
||||
return
|
||||
}
|
||||
|
||||
@@ -15,12 +15,12 @@ import (
|
||||
|
||||
//添加操作请求参数
|
||||
type ReqAdd struct {
|
||||
JobName string `p:"jobName" v:"required#任务名称不能为空"`
|
||||
JobParams string `p:"jobParams"` // 任务参数
|
||||
JobGroup string `p:"jobGroup" `
|
||||
InvokeTarget string `p:"invokeTarget" v:"required#执行方法不能为空"`
|
||||
CronExpression string `p:"cronExpression" v:"required#任务表达式不能为空"`
|
||||
MisfirePolicy int `p:"misfirePolicy"`
|
||||
JobName string `p:"job_mame" v:"required#任务名称不能为空"`
|
||||
JobParams string `p:"job_params"` // 任务参数
|
||||
JobGroup string `p:"job_group" `
|
||||
InvokeTarget string `p:"invoke_target" v:"required#执行方法不能为空"`
|
||||
CronExpression string `p:"cron_expression" v:"required#任务表达式不能为空"`
|
||||
MisfirePolicy int `p:"misfire_policy"`
|
||||
Concurrent int `p:"concurrent" `
|
||||
Status int `p:"status" v:"required#状态(0正常 1暂停)不能为空"`
|
||||
Remark string `p:"remark" `
|
||||
@@ -28,7 +28,7 @@ type ReqAdd struct {
|
||||
|
||||
//修改操作请求参数
|
||||
type ReqEdit struct {
|
||||
JobId int64 `p:"jobId" v:"min:1#任务id不能为空"`
|
||||
JobId int64 `p:"job_id" v:"min:1#任务id不能为空"`
|
||||
ReqAdd
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ type SelectPageReq struct {
|
||||
JobName string `p:"jobName"` //任务名称
|
||||
JobGroup string `p:"jobGroup"` //任务组名
|
||||
Status string `p:"status"` //状态(0正常 1暂停)
|
||||
PageNum int `p:"page"` //当前页码
|
||||
PageNum int `p:"pageNum"` //当前页码
|
||||
PageSize int `p:"pageSize"` //每页数
|
||||
}
|
||||
|
||||
|
||||
@@ -10,12 +10,12 @@ import (
|
||||
// Fill with you ideas below.
|
||||
//查询列表请求参数
|
||||
type SelectPageReq struct {
|
||||
LoginName string `p:"loginName"` //登陆名
|
||||
LoginName string `p:"userName"` //登陆名
|
||||
Status string `p:"status"` //状态
|
||||
Ipaddr string `p:"ipaddr"` //登录地址
|
||||
BeginTime string `p:"beginTime"` //数据范围
|
||||
EndTime string `p:"endTime"` //开始时间
|
||||
PageNum int `p:"page"` //当前页码
|
||||
PageNum int `p:"pageNum"` //当前页码
|
||||
PageSize int `p:"pageSize"` //每页数
|
||||
SortName string `p:"orderByColumn"` //排序字段
|
||||
SortOrder string `p:"isAsc"` //排序方式
|
||||
|
||||
@@ -22,7 +22,7 @@ type SelectPageReq struct {
|
||||
Status string `p:"status"` //操作状态
|
||||
BeginTime string `p:"beginTime"` //数据范围
|
||||
EndTime string `p:"endTime"` //开始时间
|
||||
PageNum int `p:"page"` //当前页码
|
||||
PageNum int `p:"pageNum"` //当前页码
|
||||
PageSize int `p:"pageSize"` //每页数
|
||||
SortName string `p:"orderByColumn"` //排序字段
|
||||
SortOrder string `p:"isAsc"` //排序方式
|
||||
@@ -113,7 +113,7 @@ func ListByPage(req *SelectPageReq) (total, page int, list []*Entity, err error)
|
||||
if req.PageSize == 0 {
|
||||
req.PageSize = service.AdminPageNum
|
||||
}
|
||||
list, err = model.Page(page, req.PageSize).FieldsEx("oper_param,json_result").Order(order).All()
|
||||
list, err = model.Page(page, req.PageSize).Order(order).All()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("获取数据失败")
|
||||
|
||||
@@ -0,0 +1,151 @@
|
||||
// ============================================================================
|
||||
// This is auto-generated by gf cli tool only once. Fill this file as you wish.
|
||||
// ============================================================================
|
||||
|
||||
package sys_post
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"gfast/library/service"
|
||||
"github.com/gogf/gf/database/gdb"
|
||||
"github.com/gogf/gf/errors/gerror"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/os/gtime"
|
||||
)
|
||||
|
||||
// Fill with you ideas below.
|
||||
|
||||
type Post struct {
|
||||
Entity
|
||||
SearchValue interface{} `json:"searchValue"`
|
||||
Remark string `json:"remark"`
|
||||
DataScope interface{} `json:"dataScope"`
|
||||
Params struct{} `json:"params"`
|
||||
Flag bool `json:"flag"`
|
||||
}
|
||||
|
||||
type SearchParams struct {
|
||||
PageNum int `p:"page"` //当前页码
|
||||
PageSize int `p:"pageSize"` //每页数
|
||||
PostCode string `p:"postCode"` //岗位编码
|
||||
PostName string `p:"postName"` //岗位名称
|
||||
Status string `p:"status"` //状态
|
||||
}
|
||||
|
||||
type AddParams struct {
|
||||
PostCode string `p:"postCode" v:"required#岗位编码不能为空"`
|
||||
PostName string `p:"postName" v:"required#岗位名称不能为空"`
|
||||
PostSort int `p:"postSort" v:"required#岗位排序不能为空"`
|
||||
Status string `p:"status" v:"required#状态不能为空"`
|
||||
Remark string `p:"remark"`
|
||||
}
|
||||
|
||||
type EditParams struct {
|
||||
PostId int64 `p:"postId" v:"required#id必须"`
|
||||
AddParams
|
||||
}
|
||||
|
||||
func List(req *SearchParams) (total, page int, list gdb.Result, err error) {
|
||||
model := g.DB().Table(Table)
|
||||
|
||||
if req != nil {
|
||||
if req.PostCode != "" {
|
||||
model.Where("post_code like ?", "%"+req.PostCode+"%")
|
||||
}
|
||||
|
||||
if req.PostName != "" {
|
||||
model.Where("post_name like ?", "%"+req.PostName+"%")
|
||||
}
|
||||
|
||||
if req.Status != "" {
|
||||
model.Where("status", req.Status)
|
||||
}
|
||||
}
|
||||
|
||||
total, err = model.Count()
|
||||
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("获取总行数失败")
|
||||
}
|
||||
|
||||
if req.PageNum == 0 {
|
||||
req.PageNum = 1
|
||||
}
|
||||
|
||||
page = req.PageNum
|
||||
|
||||
if req.PageSize == 0 {
|
||||
req.PageSize = service.AdminPageNum
|
||||
}
|
||||
|
||||
list, err = model.Page(page, req.PageSize).All()
|
||||
|
||||
//g.Log().Println(list)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("获取数据失败")
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
//获取正常状态的岗位
|
||||
func GetUsedPost() (list []*Entity, err error) {
|
||||
list, err = Model.Where(Columns.Status, 1).Order(Columns.PostSort + " ASC, " + Columns.PostId + " ASC ").All()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("获取岗位数据失败")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
/**
|
||||
添加
|
||||
*/
|
||||
func Add(addParams *AddParams) (result sql.Result, err error) {
|
||||
//g.Log().Println(addParams)
|
||||
entity := &Entity{
|
||||
PostCode: addParams.PostCode,
|
||||
PostName: addParams.PostName,
|
||||
PostSort: addParams.PostSort,
|
||||
Status: addParams.Status,
|
||||
Remark: addParams.Remark,
|
||||
CreateBy: "",
|
||||
CreateTime: gtime.Now(),
|
||||
}
|
||||
|
||||
return entity.Save()
|
||||
|
||||
}
|
||||
|
||||
func Edit(editParams *EditParams) (result sql.Result, err error) {
|
||||
entity := &Entity{
|
||||
PostId: editParams.PostId,
|
||||
PostCode: editParams.PostCode,
|
||||
PostName: editParams.PostName,
|
||||
PostSort: editParams.PostSort,
|
||||
Status: editParams.Status,
|
||||
Remark: editParams.Remark,
|
||||
UpdateBy: "",
|
||||
UpdateTime: gtime.Now(),
|
||||
}
|
||||
|
||||
return entity.Update()
|
||||
}
|
||||
|
||||
func GetOneById(id int64) (*Entity, error) {
|
||||
return Model.One(g.Map{
|
||||
"post_id": id,
|
||||
})
|
||||
}
|
||||
|
||||
func DeleteByIds(ids []int) error {
|
||||
_, err := Model.Delete("post_id IN(?)", ids)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return gerror.New("删除失败")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
// ==========================================================================
|
||||
// This is auto-generated by gf cli tool. You may not really want to edit it.
|
||||
// ==========================================================================
|
||||
|
||||
package sys_post
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"github.com/gogf/gf/database/gdb"
|
||||
"github.com/gogf/gf/os/gtime"
|
||||
)
|
||||
|
||||
// Entity is the golang structure for table sys_post.
|
||||
type Entity struct {
|
||||
PostId int64 `orm:"post_id,primary" json:"post_id"` // 岗位ID
|
||||
PostCode string `orm:"post_code" json:"post_code"` // 岗位编码
|
||||
PostName string `orm:"post_name" json:"post_name"` // 岗位名称
|
||||
PostSort int `orm:"post_sort" json:"post_sort"` // 显示顺序
|
||||
Status string `orm:"status" json:"status"` // 状态(0正常 1停用)
|
||||
CreateBy string `orm:"create_by" json:"create_by"` // 创建者
|
||||
CreateTime *gtime.Time `orm:"create_time" json:"create_time"` // 创建时间
|
||||
UpdateBy string `orm:"update_by" json:"update_by"` // 更新者
|
||||
UpdateTime *gtime.Time `orm:"update_time" json:"update_time"` // 更新时间
|
||||
Remark string `orm:"remark" json:"remark"` // 备注
|
||||
}
|
||||
|
||||
// OmitEmpty sets OPTION_OMITEMPTY option for the model, which automatically filers
|
||||
// the data and where attributes for empty values.
|
||||
func (r *Entity) OmitEmpty() *arModel {
|
||||
return Model.Data(r).OmitEmpty()
|
||||
}
|
||||
|
||||
// Inserts does "INSERT...INTO..." statement for inserting current object into table.
|
||||
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.
|
||||
func (r *Entity) Replace() (result sql.Result, err error) {
|
||||
return Model.Data(r).Replace()
|
||||
}
|
||||
|
||||
// Save does "INSERT...INTO..." statement for inserting/updating current object into table.
|
||||
// It updates the record if there's already another same record in the table
|
||||
// (it checks using primary key or unique index).
|
||||
func (r *Entity) Save() (result sql.Result, err error) {
|
||||
return Model.Data(r).Save()
|
||||
}
|
||||
|
||||
// Update does "UPDATE...WHERE..." statement for updating current object from table.
|
||||
// It updates the record if there's already another same record in the table
|
||||
// (it checks using primary key or unique index).
|
||||
func (r *Entity) Update() (result sql.Result, err error) {
|
||||
return Model.Data(r).Where(gdb.GetWhereConditionOfStruct(r)).Update()
|
||||
}
|
||||
|
||||
// Delete does "DELETE FROM...WHERE..." statement for deleting current object from table.
|
||||
func (r *Entity) Delete() (result sql.Result, err error) {
|
||||
return Model.Where(gdb.GetWhereConditionOfStruct(r)).Delete()
|
||||
}
|
||||
@@ -0,0 +1,344 @@
|
||||
// ==========================================================================
|
||||
// This is auto-generated by gf cli tool. You may not really want to edit it.
|
||||
// ==========================================================================
|
||||
|
||||
package sys_post
|
||||
|
||||
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_post operations.
|
||||
type arModel struct {
|
||||
gmvc.M
|
||||
}
|
||||
|
||||
var (
|
||||
// Table is the table name of sys_post.
|
||||
Table = "sys_post"
|
||||
// Model is the model object of sys_post.
|
||||
Model = &arModel{g.DB("default").Table(Table).Safe()}
|
||||
// Columns defines and stores column names for table sys_post.
|
||||
Columns = struct {
|
||||
PostId string // 岗位ID
|
||||
PostCode string // 岗位编码
|
||||
PostName string // 岗位名称
|
||||
PostSort string // 显示顺序
|
||||
Status string // 状态(0正常 1停用)
|
||||
CreateBy string // 创建者
|
||||
CreateTime string // 创建时间
|
||||
UpdateBy string // 更新者
|
||||
UpdateTime string // 更新时间
|
||||
Remark string // 备注
|
||||
}{
|
||||
PostId: "post_id",
|
||||
PostCode: "post_code",
|
||||
PostName: "post_name",
|
||||
PostSort: "post_sort",
|
||||
Status: "status",
|
||||
CreateBy: "create_by",
|
||||
CreateTime: "create_time",
|
||||
UpdateBy: "update_by",
|
||||
UpdateTime: "update_time",
|
||||
Remark: "remark",
|
||||
}
|
||||
)
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Master marks the following operation on master node.
|
||||
func (m *arModel) Master() *arModel {
|
||||
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.M.Slave()}
|
||||
}
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Fields sets the operation fields of the model, multiple fields joined using char ','.
|
||||
func (m *arModel) Fields(fields string) *arModel {
|
||||
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.M.FieldsEx(fields)}
|
||||
}
|
||||
|
||||
// Option sets the extra operation option for the model.
|
||||
func (m *arModel) Option(option int) *arModel {
|
||||
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.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.M.Filter()}
|
||||
}
|
||||
|
||||
// Where sets the condition statement for the model. The parameter <where> can be type of
|
||||
// string/map/gmap/slice/struct/*struct, etc. Note that, if it's called more than one times,
|
||||
// multiple conditions will be joined into where statement using "AND".
|
||||
// Eg:
|
||||
// Where("uid=10000")
|
||||
// Where("uid", 10000)
|
||||
// Where("money>? AND name like ?", 99999, "vip_%")
|
||||
// Where("uid", 1).Where("name", "john")
|
||||
// Where("status IN (?)", g.Slice{1,2,3})
|
||||
// Where("age IN(?,?)", 18, 50)
|
||||
// Where(User{ Id : 1, UserName : "john"})
|
||||
func (m *arModel) Where(where interface{}, args ...interface{}) *arModel {
|
||||
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.M.And(where, args...)}
|
||||
}
|
||||
|
||||
// Or adds "OR" condition to the where statement.
|
||||
func (m *arModel) Or(where interface{}, args ...interface{}) *arModel {
|
||||
return &arModel{m.M.Or(where, args...)}
|
||||
}
|
||||
|
||||
// Group sets the "GROUP BY" statement for the model.
|
||||
func (m *arModel) Group(groupBy string) *arModel {
|
||||
return &arModel{m.M.Group(groupBy)}
|
||||
}
|
||||
|
||||
// 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.
|
||||
// The parameter <limit> can be either one or two number, if passed two number is passed,
|
||||
// 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.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.M.Offset(offset)}
|
||||
}
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Batch sets the batch operation number for the model.
|
||||
func (m *arModel) Batch(batch int) *arModel {
|
||||
return &arModel{m.M.Batch(batch)}
|
||||
}
|
||||
|
||||
// Cache sets the cache feature for the model. It caches the result of the sql, which means
|
||||
// if there's another same sql request, it just reads and returns the result from cache, it
|
||||
// but not committed and executed into the database.
|
||||
//
|
||||
// If the parameter <duration> < 0, which means it clear the cache with given <name>.
|
||||
// If the parameter <duration> = 0, which means it never expires.
|
||||
// If the parameter <duration> > 0, which means it expires after <duration>.
|
||||
//
|
||||
// The optional parameter <name> is used to bind a name to the cache, which means you can later
|
||||
// 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(duration time.Duration, name ...string) *arModel {
|
||||
return &arModel{m.M.Cache(duration, name...)}
|
||||
}
|
||||
|
||||
// Data sets the operation data for the model.
|
||||
// The parameter <data> can be type of string/map/gmap/slice/struct/*struct, etc.
|
||||
// Eg:
|
||||
// Data("uid=10000")
|
||||
// Data("uid", 10000)
|
||||
// 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.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.
|
||||
//
|
||||
// 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
|
||||
}
|
||||
var entities []*Entity
|
||||
if err = all.Structs(&entities); err != nil && err != sql.ErrNoRows {
|
||||
return nil, err
|
||||
}
|
||||
return entities, nil
|
||||
}
|
||||
|
||||
// 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.
|
||||
//
|
||||
// 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
|
||||
}
|
||||
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.M.Chunk(limit, func(result gdb.Result, err error) bool {
|
||||
var entities []*Entity
|
||||
err = result.Structs(&entities)
|
||||
if err == sql.ErrNoRows {
|
||||
return false
|
||||
}
|
||||
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()}
|
||||
}
|
||||
+154
-51
@@ -1,52 +1,93 @@
|
||||
package user
|
||||
|
||||
import (
|
||||
"gfast/library/utils"
|
||||
"github.com/gogf/gf/errors/gerror"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/os/gtime"
|
||||
"github.com/gogf/gf/util/gconv"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
//验证用户表单数据
|
||||
func checkUserData(params map[string]interface{}, t string) error {
|
||||
rules := []string{
|
||||
"id@integer|min:1#管理员id必须为整数|管理员Id必须大于0",
|
||||
"user_name@required|length:3,60#请填用户名|用户名应在:min到:max个字符之间",
|
||||
"mobile@telephone#手机号码格式不正确",
|
||||
"user_nickname@required|length:3,50#请填写姓名|姓名应在:min到:max个字符之间",
|
||||
"user_email@email#邮箱格式错误",
|
||||
}
|
||||
if t == "add" {
|
||||
rules = append(rules, "user_password@required|length:6,60#请填写密码|密码应在::min到:max个字符之间")
|
||||
} else {
|
||||
rules = append(rules, "user_password@length:6,60#密码应在::min到:max个字符之间")
|
||||
}
|
||||
e := gvalid.CheckMap(params, rules)
|
||||
if e != nil {
|
||||
return e
|
||||
}
|
||||
return nil
|
||||
//设置用户状态参数
|
||||
type StatusReq struct {
|
||||
Id int `p:"userId" v:"required#用户id不能为空"`
|
||||
UserStatus int `p:"status" v:"required#用户状态不能为空"`
|
||||
}
|
||||
|
||||
//重置用户密码状态参数
|
||||
type ResetPwdReq struct {
|
||||
Id int `p:"userId" v:"required#用户id不能为空"`
|
||||
Password string `p:"password" v:"required|password#密码不能为空|密码以字母开头,只能包含字母、数字和下划线,长度在6~18之间"`
|
||||
}
|
||||
|
||||
//用户搜索请求参数
|
||||
type SearchReq struct {
|
||||
DeptId string `p:deptId` //部门id
|
||||
DeptIds []int //所属部门id数据
|
||||
BeginTime string `p:"beginTime`
|
||||
EndTime string `p:"endTime"`
|
||||
Phonenumber string `p:"phonenumber"`
|
||||
Status string `p:"status"`
|
||||
KeyWords string `p:"userName"`
|
||||
PageNum int `p:"page"` //当前页码
|
||||
PageSize int `p:"pageSize"` //每页数
|
||||
}
|
||||
|
||||
//添加修改用户公用请求字段
|
||||
type SetUserReq struct {
|
||||
DeptId int64 `p:"deptId" v:"required#用户部门不能为空"` //所属部门
|
||||
Email string `p:"email" v:"email#邮箱格式错误"` //邮箱
|
||||
NickName string `p:"nickName" v:"required#用户昵称不能为空"`
|
||||
Phonenumber string `p:"phonenumber" v:"required|phone#手机号不能为空|手机号格式错误"`
|
||||
PostIds []int64 `p:"postIds"`
|
||||
Remark string `p:"remark"`
|
||||
RoleIds []int64 `p:"roleIds"`
|
||||
Sex int `p:"sex"`
|
||||
Status int `p:"status"`
|
||||
IsAdmin int `p:"is_admin"` // 是否后台管理员 1 是 0 否
|
||||
}
|
||||
|
||||
//添加用户请求
|
||||
type AddUserReq struct {
|
||||
SetUserReq
|
||||
UserName string `p:"userName" v:"required#用户账号不能为空"`
|
||||
Password string `p:"password" v:"required|password#密码不能为空|密码以字母开头,只能包含字母、数字和下划线,长度在6~18之间"`
|
||||
}
|
||||
|
||||
//修改用户请求
|
||||
type EditUserReq struct {
|
||||
SetUserReq
|
||||
UserId int `p:"userId" v:"required#用户id不能为空"`
|
||||
}
|
||||
|
||||
func GetUserById(id int) (*Entity, error) {
|
||||
return Model.Where("id", id).One()
|
||||
}
|
||||
|
||||
//添加管理员操作
|
||||
func Add(data map[string]interface{}) (InsertId int64, err error) {
|
||||
e := checkUserData(data, "add")
|
||||
if e != nil {
|
||||
err = gerror.New(e.(*gvalid.Error).FirstString())
|
||||
return
|
||||
}
|
||||
if i, _ := Model.Where("user_name=?", data["user_name"]).Count(); i != 0 {
|
||||
func Add(req *AddUserReq) (InsertId int64, err error) {
|
||||
if i, _ := Model.Where("user_name=?", req.UserName).Count(); i != 0 {
|
||||
err = gerror.New("用户名已经存在")
|
||||
return
|
||||
}
|
||||
if i, _ := Model.Where("mobile=?", data["mobile"]).Count(); i != 0 {
|
||||
if i, _ := Model.Where("mobile=?", req.Phonenumber).Count(); i != 0 {
|
||||
err = gerror.New("手机号已经存在")
|
||||
return
|
||||
}
|
||||
//保存管理员信息
|
||||
data["create_time"] = gtime.Timestamp()
|
||||
res, err := Model.Filter().Data(data).Save()
|
||||
entity := new(Entity)
|
||||
entity.UserName = req.UserName
|
||||
entity.DeptId = req.DeptId
|
||||
entity.UserStatus = req.Status
|
||||
entity.CreateTime = gconv.Int(gtime.Timestamp())
|
||||
entity.Mobile = req.Phonenumber
|
||||
entity.Sex = req.Sex
|
||||
entity.UserEmail = req.Email
|
||||
entity.UserNickname = req.NickName
|
||||
entity.UserPassword = req.Password
|
||||
entity.Remark = req.Remark
|
||||
|
||||
res, err := entity.Save()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@@ -55,40 +96,102 @@ func Add(data map[string]interface{}) (InsertId int64, err error) {
|
||||
}
|
||||
|
||||
//修改用户信息
|
||||
func Edit(data map[string]interface{}) (err error) {
|
||||
e := checkUserData(data, "edit")
|
||||
if e != nil {
|
||||
err = gerror.New(e.(*gvalid.Error).FirstString())
|
||||
return
|
||||
}
|
||||
if i, _ := Model.Where("id!=? and user_name=?", data["id"], data["user_name"]).Count(); i != 0 {
|
||||
err = gerror.New("用户名已经存在")
|
||||
return
|
||||
}
|
||||
if i, _ := Model.Where("id!=? and mobile=?", data["mobile"]).Count(); i != 0 {
|
||||
func Edit(req *EditUserReq) (err error) {
|
||||
if i, _ := Model.Where("id!=? and mobile=?", req.UserId, req.Phonenumber).Count(); i != 0 {
|
||||
err = gerror.New("手机号已经存在")
|
||||
return
|
||||
}
|
||||
//保存管理员信息
|
||||
_, err = Model.Filter().Data(data).Save()
|
||||
if err != nil {
|
||||
var entity *Entity
|
||||
entity, err = Model.Where("id", req.UserId).One()
|
||||
if err != nil || entity == nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("获取用户信息失败")
|
||||
return
|
||||
}
|
||||
entity.DeptId = req.DeptId
|
||||
entity.UserStatus = req.Status
|
||||
entity.Mobile = req.Phonenumber
|
||||
entity.Sex = req.Sex
|
||||
entity.UserEmail = req.Email
|
||||
entity.UserNickname = req.NickName
|
||||
entity.Remark = req.Remark
|
||||
entity.IsAdmin = req.IsAdmin
|
||||
_, err = entity.Update()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("修改用户信息失败")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//获取管理员列表
|
||||
func GetAdminList(where g.Map, page, pageNum int) (total int, userList []*Entity, err error) {
|
||||
func GetAdminList(req *SearchReq) (total, page int, userList []*Entity, err error) {
|
||||
userModel := Model
|
||||
if v, ok := where["keyWords"]; ok {
|
||||
keyWords := gconv.String(v)
|
||||
if keyWords != "" {
|
||||
keyWords = "%" + keyWords + "%"
|
||||
userModel = userModel.Where("user_name like ? or mobile like ? or user_nickname like ?",
|
||||
keyWords, keyWords, keyWords)
|
||||
if req != nil {
|
||||
if req.KeyWords != "" {
|
||||
keyWords := "%" + req.KeyWords + "%"
|
||||
userModel = userModel.Where("user_name like ? or user_nickname like ?",
|
||||
keyWords, keyWords)
|
||||
}
|
||||
if len(req.DeptIds) != 0 {
|
||||
userModel = userModel.Where("dept_id in (?)", req.DeptIds)
|
||||
}
|
||||
if req.Status != "" {
|
||||
userModel = userModel.Where("user_status", gconv.Int(req.Status))
|
||||
}
|
||||
if req.Phonenumber != "" {
|
||||
userModel = userModel.Where("mobile like ?", "%"+req.Phonenumber+"%")
|
||||
}
|
||||
if req.BeginTime != "" {
|
||||
userModel = userModel.Where("create_time >=?", utils.StrToTimestamp(req.BeginTime))
|
||||
}
|
||||
if req.EndTime != "" {
|
||||
userModel = userModel.Where("create_time <=?", utils.StrToTimestamp(req.EndTime))
|
||||
}
|
||||
}
|
||||
total, err = userModel.Count()
|
||||
userList, err = userModel.ForPage(page, pageNum).OrderBy("id asc").All()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("获取总行数失败")
|
||||
return
|
||||
}
|
||||
if req.PageNum == 0 {
|
||||
req.PageNum = 1
|
||||
}
|
||||
page = req.PageNum
|
||||
userList, err = userModel.ForPage(page, req.PageSize).OrderBy("id asc").All()
|
||||
return
|
||||
}
|
||||
|
||||
//修改用户状态
|
||||
func ChangeUserStatus(req *StatusReq) error {
|
||||
user, err := Model.Where("id", req.Id).One()
|
||||
if err != nil || user == nil {
|
||||
g.Log().Error(err)
|
||||
return gerror.New("用户不存在")
|
||||
}
|
||||
user.UserStatus = req.UserStatus
|
||||
_, err = user.Update()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return gerror.New("修改用户状态失败")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
//重置用户密码
|
||||
func ResetUserPwd(req *ResetPwdReq) error {
|
||||
user, err := Model.Where("id", req.Id).One()
|
||||
if err != nil || user == nil {
|
||||
g.Log().Error(err)
|
||||
return gerror.New("用户不存在")
|
||||
}
|
||||
user.UserPassword = req.Password
|
||||
_, err = user.Update()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return gerror.New("修改用户密码失败")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -24,6 +24,9 @@ type Entity struct {
|
||||
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
|
||||
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.
|
||||
|
||||
@@ -8,8 +8,8 @@ import (
|
||||
// Fill with you ideas below.
|
||||
//列表搜索参数
|
||||
type ReqListSearch struct {
|
||||
Username string `p:"username"`
|
||||
Ip string `p:"ip"`
|
||||
Username string `p:"userName"`
|
||||
Ip string `p:"ipaddr"`
|
||||
PageNum int `p:"page"` //当前页码
|
||||
PageSize int `p:"pageSize"` //每页数
|
||||
}
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
// ============================================================================
|
||||
// This is auto-generated by gf cli tool only once. Fill this file as you wish.
|
||||
// ============================================================================
|
||||
|
||||
package user_post
|
||||
|
||||
import (
|
||||
"gfast/app/model/admin/sys_post"
|
||||
"github.com/gogf/gf/errors/gerror"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
)
|
||||
|
||||
//删除对应用户的岗位信息
|
||||
func DeleteByUserId(userId int64) error {
|
||||
_, err := Model.Delete(Columns.UserId, userId)
|
||||
return err
|
||||
}
|
||||
|
||||
//添加用户岗位
|
||||
func AddUserPost(postIds []int64, userId int64) (err error) {
|
||||
data := g.List{}
|
||||
for _, v := range postIds {
|
||||
data = append(data, g.Map{
|
||||
Columns.UserId: userId,
|
||||
Columns.PostId: v,
|
||||
})
|
||||
}
|
||||
_, err = Model.Data(data).Insert()
|
||||
return
|
||||
}
|
||||
|
||||
//获取用户岗位
|
||||
func GetAdminPosts(userId int) (postIds []int64, err error) {
|
||||
list, e := Model.All(Columns.UserId, userId)
|
||||
if e != nil {
|
||||
g.Log().Error(e)
|
||||
err = gerror.New("获取用户岗位信息失败")
|
||||
return
|
||||
}
|
||||
for _, entity := range list {
|
||||
postIds = append(postIds, entity.PostId)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//根据用户id获取岗位信息详情
|
||||
func GetPostsByUserId(userId int) ([]*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)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return datas, nil
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
// ==========================================================================
|
||||
// This is auto-generated by gf cli tool. You may not really want to edit it.
|
||||
// ==========================================================================
|
||||
|
||||
package user_post
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"github.com/gogf/gf/database/gdb"
|
||||
)
|
||||
|
||||
// Entity is the golang structure for table user_post.
|
||||
type Entity struct {
|
||||
UserId int64 `orm:"user_id,primary" json:"user_id"` // 用户ID
|
||||
PostId int64 `orm:"post_id,primary" json:"post_id"` // 岗位ID
|
||||
}
|
||||
|
||||
// OmitEmpty sets OPTION_OMITEMPTY option for the model, which automatically filers
|
||||
// the data and where attributes for empty values.
|
||||
func (r *Entity) OmitEmpty() *arModel {
|
||||
return Model.Data(r).OmitEmpty()
|
||||
}
|
||||
|
||||
// Inserts does "INSERT...INTO..." statement for inserting current object into table.
|
||||
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.
|
||||
func (r *Entity) Replace() (result sql.Result, err error) {
|
||||
return Model.Data(r).Replace()
|
||||
}
|
||||
|
||||
// Save does "INSERT...INTO..." statement for inserting/updating current object into table.
|
||||
// It updates the record if there's already another same record in the table
|
||||
// (it checks using primary key or unique index).
|
||||
func (r *Entity) Save() (result sql.Result, err error) {
|
||||
return Model.Data(r).Save()
|
||||
}
|
||||
|
||||
// Update does "UPDATE...WHERE..." statement for updating current object from table.
|
||||
// It updates the record if there's already another same record in the table
|
||||
// (it checks using primary key or unique index).
|
||||
func (r *Entity) Update() (result sql.Result, err error) {
|
||||
return Model.Data(r).Where(gdb.GetWhereConditionOfStruct(r)).Update()
|
||||
}
|
||||
|
||||
// Delete does "DELETE FROM...WHERE..." statement for deleting current object from table.
|
||||
func (r *Entity) Delete() (result sql.Result, err error) {
|
||||
return Model.Where(gdb.GetWhereConditionOfStruct(r)).Delete()
|
||||
}
|
||||
@@ -0,0 +1,345 @@
|
||||
// ==========================================================================
|
||||
// This is auto-generated by gf cli tool. You may not really want to edit it.
|
||||
// ==========================================================================
|
||||
|
||||
package user_post
|
||||
|
||||
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_post operations.
|
||||
type arModel struct {
|
||||
gmvc.M
|
||||
}
|
||||
|
||||
var (
|
||||
// Table is the table name of user_post.
|
||||
Table = "user_post"
|
||||
// Model is the model object of user_post.
|
||||
Model = &arModel{g.DB("default").Table(Table).Safe()}
|
||||
// Columns defines and stores column names for table user_post.
|
||||
Columns = struct {
|
||||
UserId string // 用户ID
|
||||
PostId string // 岗位ID
|
||||
}{
|
||||
UserId: "user_id",
|
||||
PostId: "post_id",
|
||||
}
|
||||
)
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Master marks the following operation on master node.
|
||||
func (m *arModel) Master() *arModel {
|
||||
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.M.Slave()}
|
||||
}
|
||||
|
||||
// LeftJoin does "LEFT JOIN ... ON ..." statement on the model.
|
||||
// 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.
|
||||
// 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.
|
||||
// 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.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.M.FieldsEx(fields)}
|
||||
}
|
||||
|
||||
// Option sets the extra operation option for the model.
|
||||
func (m *arModel) Option(option int) *arModel {
|
||||
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.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.M.Filter()}
|
||||
}
|
||||
|
||||
// Where sets the condition statement for the model. The parameter <where> can be type of
|
||||
// string/map/gmap/slice/struct/*struct, etc. Note that, if it's called more than one times,
|
||||
// multiple conditions will be joined into where statement using "AND".
|
||||
// Eg:
|
||||
// Where("uid=10000")
|
||||
// Where("uid", 10000)
|
||||
// Where("money>? AND name like ?", 99999, "vip_%")
|
||||
// Where("uid", 1).Where("name", "john")
|
||||
// Where("status IN (?)", g.Slice{1,2,3})
|
||||
// Where("age IN(?,?)", 18, 50)
|
||||
// Where(User{ Id : 1, UserName : "john"})
|
||||
func (m *arModel) Where(where interface{}, args ...interface{}) *arModel {
|
||||
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.M.And(where, args...)}
|
||||
}
|
||||
|
||||
// Or adds "OR" condition to the where statement.
|
||||
func (m *arModel) Or(where interface{}, args ...interface{}) *arModel {
|
||||
return &arModel{m.M.Or(where, args...)}
|
||||
}
|
||||
|
||||
// Group sets the "GROUP BY" statement for the model.
|
||||
func (m *arModel) Group(groupBy string) *arModel {
|
||||
return &arModel{m.M.Group(groupBy)}
|
||||
}
|
||||
|
||||
// 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.
|
||||
// The parameter <limit> can be either one or two number, if passed two number is passed,
|
||||
// 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.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.M.Offset(offset)}
|
||||
}
|
||||
|
||||
// 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)}
|
||||
}
|
||||
|
||||
// Batch sets the batch operation number for the model.
|
||||
func (m *arModel) Batch(batch int) *arModel {
|
||||
return &arModel{m.M.Batch(batch)}
|
||||
}
|
||||
|
||||
// Cache sets the cache feature for the model. It caches the result of the sql, which means
|
||||
// if there's another same sql request, it just reads and returns the result from cache, it
|
||||
// but not committed and executed into the database.
|
||||
//
|
||||
// If the parameter <duration> < 0, which means it clear the cache with given <name>.
|
||||
// If the parameter <duration> = 0, which means it never expires.
|
||||
// If the parameter <duration> > 0, which means it expires after <duration>.
|
||||
//
|
||||
// The optional parameter <name> is used to bind a name to the cache, which means you can later
|
||||
// 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(duration time.Duration, name ...string) *arModel {
|
||||
return &arModel{m.M.Cache(duration, name...)}
|
||||
}
|
||||
|
||||
// Data sets the operation data for the model.
|
||||
// The parameter <data> can be type of string/map/gmap/slice/struct/*struct, etc.
|
||||
// Eg:
|
||||
// Data("uid=10000")
|
||||
// Data("uid", 10000)
|
||||
// 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.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.
|
||||
//
|
||||
// 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
|
||||
}
|
||||
var entities []*Entity
|
||||
if err = all.Structs(&entities); err != nil && err != sql.ErrNoRows {
|
||||
return nil, err
|
||||
}
|
||||
return entities, nil
|
||||
}
|
||||
|
||||
// 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.
|
||||
//
|
||||
// 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
|
||||
}
|
||||
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.M.Chunk(limit, func(result gdb.Result, err error) bool {
|
||||
var entities []*Entity
|
||||
err = result.Structs(&entities)
|
||||
if err == sql.ErrNoRows {
|
||||
return false
|
||||
}
|
||||
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,13 +5,17 @@ import (
|
||||
"gfast/app/model/admin/auth_rule"
|
||||
"gfast/app/model/admin/role"
|
||||
"gfast/app/model/admin/user"
|
||||
"gfast/app/model/admin/user_post"
|
||||
"gfast/app/service/casbin_adapter_service"
|
||||
"gfast/library/utils"
|
||||
"github.com/gogf/gf/database/gdb"
|
||||
"github.com/gogf/gf/errors/gerror"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/text/gstr"
|
||||
"github.com/gogf/gf/util/gconv"
|
||||
)
|
||||
|
||||
//获取isMenu==1菜单列表
|
||||
//获取MenuType==0,1菜单列表
|
||||
func GetIsMenuList() ([]*auth_rule.Entity, error) {
|
||||
list, err := GetMenuList()
|
||||
if err != nil {
|
||||
@@ -19,7 +23,7 @@ func GetIsMenuList() ([]*auth_rule.Entity, error) {
|
||||
}
|
||||
var gList = make([]*auth_rule.Entity, 0, len(list))
|
||||
for _, v := range list {
|
||||
if v.Ismenu == 1 {
|
||||
if v.MenuType == 0 || v.MenuType == 1 {
|
||||
gList = append(gList, v)
|
||||
}
|
||||
}
|
||||
@@ -34,7 +38,7 @@ func GetIsMenuStatusList() ([]*auth_rule.Entity, error) {
|
||||
}
|
||||
var gList = make([]*auth_rule.Entity, 0, len(list))
|
||||
for _, v := range list {
|
||||
if v.Ismenu == 1 && v.Status == 1 {
|
||||
if (v.MenuType == 0 || v.MenuType == 1) && v.Status == 1 {
|
||||
gList = append(gList, v)
|
||||
}
|
||||
}
|
||||
@@ -61,11 +65,35 @@ func GetMenuList() (list []*auth_rule.Entity, err error) {
|
||||
return auth_rule.GetMenuList()
|
||||
}
|
||||
|
||||
func GetMenuListSearch(req *auth_rule.ReqSearch) (list []*auth_rule.Entity, err error) {
|
||||
list, err = auth_rule.GetMenuList()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if req != nil {
|
||||
tmpList := make([]*auth_rule.Entity, 0, len(list))
|
||||
for _, entity := range list {
|
||||
if (req.Title == "" || gstr.Contains(gstr.ToUpper(entity.Title), gstr.ToUpper(req.Title))) &&
|
||||
(req.Status == "" || gconv.Uint(req.Status) == entity.Status) {
|
||||
tmpList = append(tmpList, entity)
|
||||
}
|
||||
}
|
||||
list = tmpList
|
||||
}
|
||||
g.Log().Debug(list)
|
||||
return
|
||||
}
|
||||
|
||||
//检查菜单规则是否存在
|
||||
func CheckMenuNameUnique(name string, id int) bool {
|
||||
return auth_rule.CheckMenuNameUnique(name, id)
|
||||
}
|
||||
|
||||
//检查菜单路由地址是否已经存在
|
||||
func CheckMenuPathUnique(path string, id int) bool {
|
||||
return auth_rule.CheckMenuPathUnique(path, id)
|
||||
}
|
||||
|
||||
// 添加菜单操作
|
||||
func AddMenu(req *auth_rule.MenuReq) (err error, insertId int64) {
|
||||
return auth_rule.Add(req)
|
||||
@@ -81,6 +109,10 @@ func GetRoleList() (list []*role.Entity, err error) {
|
||||
return role.GetList()
|
||||
}
|
||||
|
||||
func GetRoleListSearch(req *role.SelectPageReq) (total, page int, list []*role.Entity, err error) {
|
||||
return role.GetRoleListSearch(req)
|
||||
}
|
||||
|
||||
//保存角色信息并返回插入的id
|
||||
func AddRole(tx *gdb.TX, data map[string]interface{}) (InsId int64, err error) {
|
||||
return role.Add(tx, data)
|
||||
@@ -108,6 +140,14 @@ func EditRole(tx *gdb.TX, data map[string]interface{}) (err error) {
|
||||
return role.Edit(tx, data)
|
||||
}
|
||||
|
||||
func StatusSetRole(req *role.StatusSetReq) error {
|
||||
return role.StatusSetRole(req)
|
||||
}
|
||||
|
||||
func RoleDataScope(req *role.DataScopeReq) error {
|
||||
return role.DataScope(req)
|
||||
}
|
||||
|
||||
//修改角色的授权规则
|
||||
func EditRoleRule(iRule interface{}, roleId int64) (err error) {
|
||||
enforcer, e := casbin_adapter_service.GetEnforcer()
|
||||
@@ -141,21 +181,15 @@ func DeleteRoleRule(roleId int) (err error) {
|
||||
}
|
||||
|
||||
//添加管理员操作
|
||||
func AddUser(data map[string]interface{}) (InsertId int64, err error) {
|
||||
func AddUser(req *user.AddUserReq) (InsertId int64, err error) {
|
||||
//密码加密
|
||||
data["user_password"] = utils.EncryptCBC(gconv.String(data["user_password"]), utils.AdminCbcPublicKey)
|
||||
return user.Add(data)
|
||||
req.Password = utils.EncryptCBC(gconv.String(req.Password), utils.AdminCbcPublicKey)
|
||||
return user.Add(req)
|
||||
}
|
||||
|
||||
//修改用户信息
|
||||
func EditUser(data map[string]interface{}) (err error) {
|
||||
//提交了密码?密码加密
|
||||
if val, ok := data["user_password"]; ok && gconv.String(val) != "" {
|
||||
data["user_password"] = utils.EncryptCBC(gconv.String(data["user_password"]), utils.AdminCbcPublicKey)
|
||||
} else {
|
||||
delete(data, "user_password")
|
||||
}
|
||||
return user.Edit(data)
|
||||
func EditUser(req *user.EditUserReq) (err error) {
|
||||
return user.Edit(req)
|
||||
}
|
||||
|
||||
//添加用户角色信息
|
||||
@@ -175,6 +209,23 @@ func AddUserRole(roleIds interface{}, userId int64) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
//添加用户岗位信息
|
||||
func AddUserPost(postIds []int64, userId int64) (err error) {
|
||||
//删除旧岗位信息
|
||||
err = user_post.DeleteByUserId(userId)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("设置用户岗位信息失败")
|
||||
}
|
||||
//添加用户岗位信息
|
||||
err = user_post.AddUserPost(postIds, userId)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("设置用户岗位信息失败")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//修改用户角色信息
|
||||
func EditUserRole(roleIds interface{}, userId int) (err error) {
|
||||
enforcer, e := casbin_adapter_service.GetEnforcer()
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
package cms_service
|
||||
|
||||
import (
|
||||
"gfast/app/model/admin/cms_category"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/util/gconv"
|
||||
)
|
||||
|
||||
//获取频道列表
|
||||
func GetMenuListChannel() (list []*cms_category.Entity, err error) {
|
||||
//获取频道列表
|
||||
listAll, err := GetMenuList()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
list = make([]*cms_category.Entity, 0, len(listAll))
|
||||
for _, v := range listAll {
|
||||
if v.Status == 1 && v.CateType == cms_category.ChannelCateType {
|
||||
list = append(list, v)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//获取可发布文章栏目
|
||||
func GetPublishableMenuList(catId ...int) (list g.List, err error) {
|
||||
menuList, err := GetMenuList()
|
||||
var catIdMap map[int]int
|
||||
if len(catId) > 0 {
|
||||
catIdMap = make(map[int]int, len(catId))
|
||||
for _, v := range catId {
|
||||
catIdMap[v] = v
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
list = make(g.List, 0)
|
||||
for _, menu := range menuList {
|
||||
if menu.Status == 1 {
|
||||
mapMenu := gconv.Map(menu)
|
||||
//可发布栏目
|
||||
if menu.CateType == cms_category.PublishCateType {
|
||||
mapMenu["checkAble"] = true
|
||||
} else {
|
||||
mapMenu["checkAble"] = false
|
||||
}
|
||||
if _, ok := catIdMap[gconv.Int(menu.Id)]; ok {
|
||||
mapMenu["checked"] = true
|
||||
} else {
|
||||
mapMenu["checked"] = false
|
||||
}
|
||||
list = append(list, mapMenu)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//获取所有菜单列表
|
||||
func GetMenuList() (list []*cms_category.Entity, err error) {
|
||||
return cms_category.GetList()
|
||||
}
|
||||
|
||||
//保存栏目操作
|
||||
func AddSave(req *cms_category.ReqAdd) (id int64, err error) {
|
||||
return cms_category.AddSave(req)
|
||||
}
|
||||
|
||||
//修改栏目操作
|
||||
func EditSave(req *cms_category.ReqEdit) (id int64, err error) {
|
||||
return cms_category.EditSave(req)
|
||||
}
|
||||
|
||||
//获取搜索栏目结果
|
||||
func GetMenuListSearch(req *cms_category.ReqSearchList) (menus []*cms_category.Entity, err error) {
|
||||
return cms_category.GetListSearch(req)
|
||||
}
|
||||
|
||||
//根据栏目ID获取栏目信息
|
||||
func GetMenuInfoById(id int) (menu *cms_category.Entity, err error) {
|
||||
return cms_category.GetInfoById(id)
|
||||
}
|
||||
|
||||
func DeleteMenuByIds(ids []int) (err error) {
|
||||
return cms_category.DeleteByIds(ids)
|
||||
}
|
||||
@@ -1,99 +0,0 @@
|
||||
package cms_service
|
||||
|
||||
import (
|
||||
"gfast/app/model/admin/cms_category"
|
||||
"gfast/app/model/admin/cms_category_news"
|
||||
"gfast/app/model/admin/cms_news"
|
||||
"gfast/library/utils"
|
||||
"github.com/gogf/gf/container/gvar"
|
||||
"github.com/gogf/gf/database/gdb"
|
||||
"github.com/gogf/gf/util/gconv"
|
||||
)
|
||||
|
||||
//添加文章操作
|
||||
func AddNews(req *cms_news.ReqAddParams, cateIds []int, userId int) (insId int64, err error) {
|
||||
return cms_news.AddNews(req, cateIds, userId)
|
||||
}
|
||||
|
||||
//修改文章操作
|
||||
func EditNews(req *cms_news.ReqEditParams, cateIds []int) (err error) {
|
||||
return cms_news.EditNews(req, cateIds)
|
||||
}
|
||||
|
||||
//文章列表查询
|
||||
func NewsListByPage(req *cms_news.ReqListSearchParams) (total, page int, list gdb.Result, err error) {
|
||||
var menuList []*cms_category.Entity
|
||||
//获取所有栏目
|
||||
menuList, err = GetMenuList()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if len(req.CateId) > 0 {
|
||||
//查询可发布栏目id
|
||||
menuListSlice := gconv.SliceMap(menuList)
|
||||
cateIds := req.CateId
|
||||
for _, cid := range cateIds {
|
||||
mList := make([]*cms_category.Entity, 0)
|
||||
sonList := utils.FindSonByParentId(menuListSlice, cid, "parent_id", "id")
|
||||
gconv.Structs(sonList, &mList)
|
||||
for _, v := range mList {
|
||||
if v.CateType == cms_category.PublishCateType {
|
||||
req.CateId = append(req.CateId, gconv.Int(v.Id))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
total, page, list, err = cms_news.ListByPage(req)
|
||||
if err != nil || len(list) == 0 {
|
||||
return
|
||||
}
|
||||
//匹配文章所属栏目
|
||||
var cateIds []int
|
||||
for _, v := range list {
|
||||
cateIds, err = GetCheckedCategoryIdByNewsId(gconv.Uint64(v["id"]))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
cateNameList := make(map[int]string)
|
||||
for _, menu := range menuList {
|
||||
for _, cateId := range cateIds {
|
||||
if menu.Id == gconv.Uint64(cateId) {
|
||||
cateNameList[cateId] = menu.Name
|
||||
}
|
||||
}
|
||||
}
|
||||
cateVal := new(gvar.Var)
|
||||
if len(cateNameList) > 0 {
|
||||
cateVal.Set(cateNameList)
|
||||
}
|
||||
v["cateList"] = cateVal
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//通过id获取文章信息
|
||||
func GetNewsById(id int) (news *cms_news.Entity, err error) {
|
||||
return cms_news.GetById(id)
|
||||
}
|
||||
|
||||
//通过文章id获取关联的栏目id
|
||||
func GetCheckedCategoryIdByNewsId(newsId uint64) (catIds []int, err error) {
|
||||
categories, err := GetCategoriesByNewsId(newsId)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
catIds = make([]int, len(categories))
|
||||
for k, v := range categories {
|
||||
catIds[k] = gconv.Int(v.CategoryId)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//通过文章id获取关联栏目信息
|
||||
func GetCategoriesByNewsId(newsId uint64) (categories []*cms_category_news.Entity, err error) {
|
||||
return cms_category_news.GetCategoriesByNewsId(newsId)
|
||||
}
|
||||
|
||||
func DeleteCmsByIds(ids []int) (err error) {
|
||||
return cms_news.DeleteByIds(ids)
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package dept_service
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"gfast/app/model/admin/role_dept"
|
||||
"gfast/app/model/admin/sys_dept"
|
||||
)
|
||||
|
||||
/**
|
||||
获取列表数据
|
||||
*/
|
||||
func GetList(searchParams *sys_dept.SearchParams) ([]*sys_dept.Dept, error) {
|
||||
if list, err := sys_dept.GetList(searchParams); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return list, nil
|
||||
}
|
||||
}
|
||||
|
||||
func GetRoleDepts(roleId int64) ([]int64, error) {
|
||||
return role_dept.GetRoleDepts(roleId)
|
||||
}
|
||||
|
||||
func AddDept(data *sys_dept.AddParams) (sql.Result, error) {
|
||||
return sys_dept.AddDept(data)
|
||||
}
|
||||
|
||||
func EditDept(data *sys_dept.EditParams) error {
|
||||
return sys_dept.EditDept(data)
|
||||
}
|
||||
|
||||
func GetDeptById(id int64) (*sys_dept.Dept, error) {
|
||||
return sys_dept.GetDeptById(id)
|
||||
}
|
||||
|
||||
/**
|
||||
查询部门排除节点
|
||||
*/
|
||||
func Exclude(id int64) ([]*sys_dept.Dept, error) {
|
||||
return sys_dept.Exclude(id)
|
||||
}
|
||||
|
||||
/**
|
||||
删除
|
||||
*/
|
||||
func DelDept(id int64) error {
|
||||
return sys_dept.DelDept(id)
|
||||
}
|
||||
@@ -2,7 +2,10 @@ package dict_service
|
||||
|
||||
import (
|
||||
"gfast/app/model/admin/sys_dict_type"
|
||||
"gfast/app/service/cache_service"
|
||||
"github.com/gogf/gf/errors/gerror"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/util/gconv"
|
||||
)
|
||||
|
||||
//检查字典类型是否唯一
|
||||
@@ -44,3 +47,22 @@ func GetDictWithDataByType(dictType, defaultValue, emptyLabel string) (dict g.Ma
|
||||
func DeleteDictByIds(ids []int) error {
|
||||
return sys_dict_type.DeleteDictByIds(ids)
|
||||
}
|
||||
|
||||
func GetAllDictType() (list []*sys_dict_type.Entity, err error) {
|
||||
cache := cache_service.New()
|
||||
//从缓存获取
|
||||
data := cache.Get(gconv.String(cache_service.AdminConfigDict) + "_dict_type_all")
|
||||
if data != nil {
|
||||
list = data.([]*sys_dict_type.Entity)
|
||||
return
|
||||
}
|
||||
list, err = sys_dict_type.GetAllDictType()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
err = gerror.New("获取字典类型数据出错")
|
||||
return
|
||||
}
|
||||
//缓存
|
||||
cache.Set(gconv.String(cache_service.AdminConfigDict)+"_dict_type_all", list, 0, cache_service.AdminSysConfigTag)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -0,0 +1,498 @@
|
||||
package gen_service
|
||||
|
||||
import (
|
||||
"gfast/app/model/admin/gen_table"
|
||||
"gfast/app/model/admin/gen_table_column"
|
||||
"github.com/gogf/gf/database/gdb"
|
||||
"github.com/gogf/gf/encoding/gjson"
|
||||
"github.com/gogf/gf/errors/gerror"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/os/gtime"
|
||||
"github.com/gogf/gf/util/gconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
//根据条件分页查询数据
|
||||
func SelectDbTableList(param *gen_table.SelectPageReq) (total int, list []*gen_table.Entity, err error) {
|
||||
return gen_table.SelectDbTableList(param)
|
||||
}
|
||||
|
||||
//根据条件分页查询数据
|
||||
func SelectListByPage(param *gen_table.SelectPageReq) (total int, list []*gen_table.Entity, err error) {
|
||||
return gen_table.SelectListByPage(param)
|
||||
}
|
||||
|
||||
//查询据库列表
|
||||
func SelectDbTableListByNames(tableNames []string) ([]*gen_table.Entity, error) {
|
||||
return gen_table.SelectDbTableListByNames(tableNames)
|
||||
}
|
||||
|
||||
//导入表结构
|
||||
func ImportGenTable(tableList []*gen_table.Entity, operName string) error {
|
||||
if tableList != nil && operName != "" {
|
||||
tx, err := g.DB().Begin()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, table := range tableList {
|
||||
tableName := table.TableName
|
||||
InitTable(table, operName)
|
||||
result, err := tx.Table(gen_table.Table).Insert(table)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
tmpid, err := result.LastInsertId()
|
||||
|
||||
if err != nil || tmpid <= 0 {
|
||||
tx.Rollback()
|
||||
return gerror.New("保存数据失败")
|
||||
}
|
||||
|
||||
table.TableId = tmpid
|
||||
|
||||
// 保存列信息
|
||||
genTableColumns, err := gen_table_column.SelectDbTableColumnsByName(tableName)
|
||||
|
||||
if err != nil || len(genTableColumns) <= 0 {
|
||||
tx.Rollback()
|
||||
return gerror.New("获取列数据失败")
|
||||
}
|
||||
|
||||
for _, column := range genTableColumns {
|
||||
InitColumnField(column, table)
|
||||
_, err = tx.Table("gen_table_column").Insert(column)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return gerror.New("保存列数据失败")
|
||||
}
|
||||
}
|
||||
}
|
||||
return tx.Commit()
|
||||
} else {
|
||||
return gerror.New("参数错误")
|
||||
}
|
||||
}
|
||||
|
||||
//获取数据库类型字段
|
||||
func GetDbType(columnType string) string {
|
||||
if strings.Index(columnType, "(") > 0 {
|
||||
return columnType[0:strings.Index(columnType, "(")]
|
||||
} else {
|
||||
return columnType
|
||||
}
|
||||
}
|
||||
|
||||
//将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。 例如:HELLO_WORLD->HelloWorld
|
||||
func ConvertToCamelCase(name string) string {
|
||||
if name == "" {
|
||||
return ""
|
||||
} else if !strings.Contains(name, "_") {
|
||||
// 不含下划线,仅将首字母大写
|
||||
return strings.ToUpper(name[0:1]) + name[1:len(name)]
|
||||
}
|
||||
var result string = ""
|
||||
camels := strings.Split(name, "_")
|
||||
for index := range camels {
|
||||
if camels[index] == "" {
|
||||
continue
|
||||
}
|
||||
camel := camels[index]
|
||||
result = result + strings.ToUpper(camel[0:1]) + strings.ToLower(camel[1:len(camel)])
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
////将下划线大写方式命名的字符串转换为驼峰式,首字母小写。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。 例如:HELLO_WORLD->helloWorld
|
||||
func ConvertToCamelCase1(name string) string {
|
||||
if name == "" {
|
||||
return ""
|
||||
} else if !strings.Contains(name, "_") {
|
||||
// 不含下划线,原值返回
|
||||
return name
|
||||
}
|
||||
var result string = ""
|
||||
camels := strings.Split(name, "_")
|
||||
for index := range camels {
|
||||
if camels[index] == "" {
|
||||
continue
|
||||
}
|
||||
camel := camels[index]
|
||||
if result == "" {
|
||||
result = strings.ToLower(camel[0:1]) + strings.ToLower(camel[1:len(camel)])
|
||||
} else {
|
||||
result = result + strings.ToUpper(camel[0:1]) + strings.ToLower(camel[1:len(camel)])
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
//获取字段长度
|
||||
func GetColumnLength(columnType string) int {
|
||||
start := strings.Index(columnType, "(")
|
||||
end := strings.Index(columnType, ")")
|
||||
result := ""
|
||||
if start >= 0 && end >= 0 {
|
||||
result = columnType[start+1 : end-1]
|
||||
}
|
||||
return gconv.Int(result)
|
||||
}
|
||||
|
||||
//初始化列属性字段
|
||||
func InitColumnField(column *gen_table_column.Entity, table *gen_table.Entity) {
|
||||
dataType := GetDbType(column.ColumnType)
|
||||
columnName := column.ColumnName
|
||||
column.TableId = table.TableId
|
||||
column.CreateBy = table.CreateBy
|
||||
//设置字段名
|
||||
column.GoField = ConvertToCamelCase(columnName)
|
||||
column.HtmlField = ConvertToCamelCase1(columnName)
|
||||
|
||||
if gen_table_column.IsStringObject(dataType) {
|
||||
//字段为字符串类型
|
||||
column.GoType = "string"
|
||||
columnLength := GetColumnLength(column.ColumnType)
|
||||
if columnLength >= 500 {
|
||||
column.HtmlType = "textarea"
|
||||
} else {
|
||||
column.HtmlType = "input"
|
||||
}
|
||||
} else if gen_table_column.IsTimeObject(dataType) {
|
||||
//字段为时间类型
|
||||
column.GoType = "Time"
|
||||
column.HtmlType = "datatime"
|
||||
} else if gen_table_column.IsNumberObject(dataType) {
|
||||
//字段为数字类型
|
||||
column.HtmlType = "input"
|
||||
// 如果是浮点型
|
||||
tmp := column.ColumnType
|
||||
start := strings.Index(tmp, "(")
|
||||
end := strings.Index(tmp, ")")
|
||||
result := "0"
|
||||
if start > 0 && end > 0 {
|
||||
result = tmp[start+1 : end]
|
||||
}
|
||||
arr := strings.Split(result, ",")
|
||||
if len(arr) == 2 && gconv.Int(arr[1]) > 0 {
|
||||
column.GoType = "float64"
|
||||
} else if len(arr) == 1 && gconv.Int(arr[0]) <= 10 {
|
||||
column.GoType = "int"
|
||||
} else {
|
||||
column.GoType = "int64"
|
||||
}
|
||||
}
|
||||
//新增字段
|
||||
if columnName == "create_by" || columnName == "create_time" || columnName == "update_by" || columnName == "update_time" {
|
||||
column.IsRequired = "0"
|
||||
column.IsInsert = "0"
|
||||
} else {
|
||||
column.IsRequired = "0"
|
||||
column.IsInsert = "1"
|
||||
if strings.Index(columnName, "name") >= 0 || strings.Index(columnName, "status") >= 0 {
|
||||
column.IsRequired = "1"
|
||||
}
|
||||
}
|
||||
|
||||
// 编辑字段
|
||||
if gen_table_column.IsNotEdit(columnName) {
|
||||
if column.IsPk == "1" {
|
||||
column.IsEdit = "0"
|
||||
} else {
|
||||
column.IsEdit = "1"
|
||||
}
|
||||
} else {
|
||||
column.IsEdit = "0"
|
||||
}
|
||||
// 列表字段
|
||||
if gen_table_column.IsNotList(columnName) {
|
||||
column.IsList = "1"
|
||||
} else {
|
||||
column.IsList = "0"
|
||||
}
|
||||
// 查询字段
|
||||
if gen_table_column.IsNotQuery(columnName) {
|
||||
column.IsQuery = "1"
|
||||
} else {
|
||||
column.IsQuery = "0"
|
||||
}
|
||||
|
||||
// 查询字段类型
|
||||
if CheckNameColumn(columnName) {
|
||||
column.QueryType = "LIKE"
|
||||
} else {
|
||||
column.QueryType = "EQ"
|
||||
}
|
||||
|
||||
// 状态字段设置单选框
|
||||
if CheckStatusColumn(columnName) {
|
||||
column.HtmlType = "radio"
|
||||
} else if CheckTypeColumn(columnName) || CheckSexColumn(columnName) {
|
||||
// 类型&性别字段设置下拉框
|
||||
column.HtmlType = "select"
|
||||
}
|
||||
}
|
||||
|
||||
//检查字段名后3位是否是sex
|
||||
func CheckSexColumn(columnName string) bool {
|
||||
if len(columnName) >= 3 {
|
||||
end := len(columnName)
|
||||
start := end - 3
|
||||
|
||||
if start <= 0 {
|
||||
start = 0
|
||||
}
|
||||
|
||||
if columnName[start:end] == "sex" {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
//检查字段名后4位是否是type
|
||||
func CheckTypeColumn(columnName string) bool {
|
||||
if len(columnName) >= 4 {
|
||||
end := len(columnName)
|
||||
start := end - 4
|
||||
|
||||
if start <= 0 {
|
||||
start = 0
|
||||
}
|
||||
|
||||
if columnName[start:end] == "type" {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
//检查字段名后6位是否是status
|
||||
func CheckStatusColumn(columnName string) bool {
|
||||
if len(columnName) >= 6 {
|
||||
end := len(columnName)
|
||||
start := end - 6
|
||||
|
||||
if start <= 0 {
|
||||
start = 0
|
||||
}
|
||||
tmp := columnName[start:end]
|
||||
|
||||
if tmp == "status" {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
//检查字段名后4位是否是name
|
||||
func CheckNameColumn(columnName string) bool {
|
||||
if len(columnName) >= 4 {
|
||||
end := len(columnName)
|
||||
start := end - 4
|
||||
|
||||
if start <= 0 {
|
||||
start = 0
|
||||
}
|
||||
|
||||
tmp := columnName[start:end]
|
||||
|
||||
if tmp == "name" {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
//初始化表信息
|
||||
func InitTable(table *gen_table.Entity, operName string) {
|
||||
table.ClassName = ConvertClassName(table.TableName)
|
||||
table.PackageName = g.Cfg().GetString("gen.packageName")
|
||||
table.ModuleName = g.Cfg().GetString("gen.moduleName")
|
||||
table.BusinessName = GetBusinessName(table.TableName)
|
||||
table.FunctionName = strings.ReplaceAll(table.TableComment, "表", "")
|
||||
table.FunctionAuthor = g.Cfg().GetString("gen.author")
|
||||
table.CreateBy = operName
|
||||
table.TplCategory = "crud"
|
||||
table.CreateTime = gtime.Now()
|
||||
}
|
||||
|
||||
//表名转换成类名
|
||||
func ConvertClassName(tableName string) string {
|
||||
autoRemovePre := g.Cfg().GetBool("gen.autoRemovePre")
|
||||
tablePrefix := g.Cfg().GetString("gen.tablePrefix")
|
||||
if autoRemovePre && tablePrefix != "" {
|
||||
searchList := strings.Split(tablePrefix, ",")
|
||||
for _, str := range searchList {
|
||||
tableName = strings.ReplaceAll(tableName, str, "")
|
||||
}
|
||||
}
|
||||
return tableName
|
||||
}
|
||||
|
||||
//获取业务名
|
||||
func GetBusinessName(tableName string) string {
|
||||
lastIndex := strings.LastIndex(tableName, "_")
|
||||
nameLength := len(tableName)
|
||||
businessName := tableName[lastIndex+1 : nameLength]
|
||||
return businessName
|
||||
}
|
||||
|
||||
//根据table_id查询表列数据
|
||||
func SelectGenTableColumnListByTableId(tableId int64) ([]*gen_table_column.Entity, error) {
|
||||
return gen_table_column.SelectGenTableColumnListByTableId(tableId)
|
||||
}
|
||||
|
||||
func GetTableInfoByTableId(tableId int64) (info *gen_table.Entity, err error) {
|
||||
return gen_table.GetInfoById(tableId)
|
||||
}
|
||||
|
||||
//修改表和列信息
|
||||
func SaveEdit(req *gen_table.EditReq) (err error) {
|
||||
if req == nil {
|
||||
err = gerror.New("参数错误")
|
||||
return
|
||||
}
|
||||
table, err := gen_table.FindOne("table_id=?", req.TableId)
|
||||
if err != nil || table == nil {
|
||||
err = gerror.New("数据不存在")
|
||||
return
|
||||
}
|
||||
if req.TableName != "" {
|
||||
table.TableName = req.TableName
|
||||
}
|
||||
if req.TableComment != "" {
|
||||
table.TableComment = req.TableComment
|
||||
}
|
||||
if req.BusinessName != "" {
|
||||
table.BusinessName = req.BusinessName
|
||||
}
|
||||
if req.ClassName != "" {
|
||||
table.ClassName = req.ClassName
|
||||
}
|
||||
if req.FunctionAuthor != "" {
|
||||
table.FunctionAuthor = req.FunctionAuthor
|
||||
}
|
||||
if req.FunctionName != "" {
|
||||
table.FunctionName = req.FunctionName
|
||||
}
|
||||
if req.ModuleName != "" {
|
||||
table.ModuleName = req.ModuleName
|
||||
}
|
||||
if req.PackageName != "" {
|
||||
table.PackageName = req.PackageName
|
||||
}
|
||||
if req.Remark != "" {
|
||||
table.Remark = req.Remark
|
||||
}
|
||||
if req.TplCategory != "" {
|
||||
table.TplCategory = req.TplCategory
|
||||
}
|
||||
if req.Params != "" {
|
||||
table.Options = req.Params
|
||||
}
|
||||
table.UpdateTime = gtime.Now()
|
||||
table.UpdateBy = req.UserName
|
||||
if req.TplCategory == "tree" {
|
||||
//树表设置options
|
||||
options := g.Map{
|
||||
"tree_code": req.TreeCode,
|
||||
"tree_parent_code": req.TreeParentCode,
|
||||
"tree_name": req.TreeName,
|
||||
}
|
||||
table.Options = gconv.String(options)
|
||||
} else {
|
||||
table.Options = ""
|
||||
}
|
||||
|
||||
var tx *gdb.TX
|
||||
tx, err = g.DB().Begin()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
_, err = tx.Table(gen_table.Table).Save(table)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
|
||||
//保存列数据
|
||||
if req.Columns != "" {
|
||||
var j *gjson.Json
|
||||
if j, err = gjson.DecodeToJson([]byte(req.Columns)); err != nil {
|
||||
tx.Rollback()
|
||||
return
|
||||
} else {
|
||||
var columnList []gen_table_column.Entity
|
||||
err = j.ToStructs(&columnList)
|
||||
if err == nil && columnList != nil && len(columnList) > 0 {
|
||||
for _, column := range columnList {
|
||||
if column.ColumnId > 0 {
|
||||
tmp, _ := gen_table_column.FindOne("column_id=?", column.ColumnId)
|
||||
if tmp != nil {
|
||||
tmp.ColumnComment = column.ColumnComment
|
||||
tmp.GoType = column.GoType
|
||||
tmp.HtmlType = column.HtmlType
|
||||
tmp.QueryType = column.QueryType
|
||||
tmp.GoField = column.GoField
|
||||
tmp.DictType = column.DictType
|
||||
tmp.IsInsert = column.IsInsert
|
||||
tmp.IsEdit = column.IsEdit
|
||||
tmp.IsList = column.IsList
|
||||
tmp.IsQuery = column.IsQuery
|
||||
_, err = tx.Table(gen_table_column.Table).Save(tmp)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
tx.Commit()
|
||||
return
|
||||
}
|
||||
|
||||
//删除表格
|
||||
func Delete(ids []int) error {
|
||||
tx, err := g.DB().Begin()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return gerror.New("开启删除事务出错")
|
||||
}
|
||||
_, err = tx.Table(gen_table.Table).Where(gen_table.Columns.TableId+" in(?)", ids).Delete()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
tx.Rollback()
|
||||
return gerror.New("删除表格数据失败")
|
||||
}
|
||||
_, err = tx.Table(gen_table_column.Table).Where(gen_table_column.Columns.TableId+" in(?)", ids).Delete()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
tx.Rollback()
|
||||
return gerror.New("删除表格字段数据失败")
|
||||
}
|
||||
tx.Commit()
|
||||
return nil
|
||||
}
|
||||
|
||||
func SelectRecordById(tableId int64) (entity *gen_table.EntityExtend, err error) {
|
||||
entity, err = gen_table.SelectRecordById(tableId)
|
||||
return
|
||||
}
|
||||
|
||||
//设置主键列信息
|
||||
func SetPkColumn(table *gen_table.EntityExtend, columns []*gen_table_column.Entity) {
|
||||
for _, column := range columns {
|
||||
if column.IsPk == "1" {
|
||||
table.PkColumn = column
|
||||
break
|
||||
}
|
||||
}
|
||||
if table.PkColumn == nil {
|
||||
table.PkColumn = columns[0]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package post_service
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"gfast/app/model/admin/sys_post"
|
||||
"github.com/gogf/gf/database/gdb"
|
||||
)
|
||||
|
||||
func List(req *sys_post.SearchParams) (total, page int, list gdb.Result, err error) {
|
||||
return sys_post.List(req)
|
||||
}
|
||||
|
||||
//获取正常状态的岗位
|
||||
func GetUsedPost() (list []*sys_post.Entity, err error) {
|
||||
return sys_post.GetUsedPost()
|
||||
}
|
||||
|
||||
func Add(addParams *sys_post.AddParams) (result sql.Result, err error) {
|
||||
return sys_post.Add(addParams)
|
||||
}
|
||||
|
||||
func Edit(editParams *sys_post.EditParams) (result sql.Result, err error) {
|
||||
return sys_post.Edit(editParams)
|
||||
}
|
||||
|
||||
func GetOneById(id int64) (*sys_post.Entity, error) {
|
||||
return sys_post.GetOneById(id)
|
||||
}
|
||||
|
||||
func Delete(ids []int) error {
|
||||
return sys_post.DeleteByIds(ids)
|
||||
}
|
||||
@@ -70,6 +70,7 @@ func upByType(file *ghttp.UploadFile, fType string) (fileInfo *FileInfo, err err
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
//检测文件类型
|
||||
rightType := checkFileType(file.Filename, config.ConfigValue)
|
||||
if !rightType {
|
||||
@@ -206,7 +207,7 @@ func getUpConfig(key string) (config *sys_config.Entity, err error) {
|
||||
|
||||
//判断上传文件类型是否合法
|
||||
func checkFileType(fileName, typeString string) bool {
|
||||
suffix := gstr.SubStr(fileName, gstr.SearchArray(gstr.Split(fileName, ""), ".")+1)
|
||||
suffix := gstr.SubStrRune(fileName, gstr.PosRRune(fileName, ".")+1, gstr.LenRune(fileName)-1)
|
||||
imageType := gstr.Split(typeString, ",")
|
||||
rightType := false
|
||||
for _, v := range imageType {
|
||||
|
||||
@@ -1,20 +1,113 @@
|
||||
package user_service
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"errors"
|
||||
"fmt"
|
||||
"gfast/app/model/admin/auth_rule"
|
||||
"gfast/app/model/admin/role"
|
||||
"gfast/app/model/admin/sys_dept"
|
||||
"gfast/app/model/admin/sys_post"
|
||||
"gfast/app/model/admin/user"
|
||||
"gfast/app/model/admin/user_post"
|
||||
"gfast/app/service/admin/auth_service"
|
||||
"gfast/app/service/casbin_adapter_service"
|
||||
"gfast/boot"
|
||||
"gfast/library/service"
|
||||
"gfast/library/utils"
|
||||
"github.com/gogf/gf/errors/gerror"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/text/gstr"
|
||||
"github.com/gogf/gf/util/gconv"
|
||||
)
|
||||
|
||||
type EditParams struct {
|
||||
Id int `p:"id" v:"required#用户id不能为空"`
|
||||
UserNickname string `p:"user_nickname" v:"required#用户昵称不能为空" orm:"user_nickname"` // 用户昵称
|
||||
Mobile string `p:"mobile" v:"required|phone#手机号不能为空|手机号格式错误" orm:"mobile,unique"`
|
||||
UserEmail string `p:"user_email" v:"email#邮箱格式错误" orm:"user_email"`
|
||||
Sex int `p:"sex" orm:"sex"`
|
||||
}
|
||||
|
||||
type UpdatePwdReq struct {
|
||||
OldPassword string `p:"oldPassword" v:"required#旧密码不能为空"`
|
||||
NewPassword string `p:"newPassword" v:"required#新密码不能为空"`
|
||||
}
|
||||
|
||||
/**
|
||||
修改密码
|
||||
*/
|
||||
func UpdatePwd(r *ghttp.Request, data *UpdatePwdReq) error {
|
||||
|
||||
currentUser, err := GetCurrentUserInfo(r)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
OldPassword := utils.EncryptCBC(gconv.String(data.OldPassword), utils.AdminCbcPublicKey)
|
||||
|
||||
if OldPassword != currentUser["user_password"].(string) {
|
||||
return errors.New("原始密码错误!")
|
||||
}
|
||||
|
||||
return ResetUserPwd(&user.ResetPwdReq{
|
||||
Id: currentUser["id"].(int),
|
||||
Password: data.NewPassword,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
用户中心修改用户信息
|
||||
*/
|
||||
func Edit(info *EditParams) (sql.Result, error) {
|
||||
return user.Model.Where("id", info.Id).Data(info).Update()
|
||||
}
|
||||
|
||||
// 获取单前登录用户的信息
|
||||
func GetCurrentUserInfo(r *ghttp.Request) (map[string]interface{}, error) {
|
||||
id := GetLoginID(r)
|
||||
userEntity, err := user.GetUserById(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
userInfo := gconv.Map(userEntity)
|
||||
//delete(userInfo, "user_password")
|
||||
userInfo["roles"] = make([]string, 0)
|
||||
userInfo["posts"] = new([]*user_post.Entity)
|
||||
userInfo["dept_info"] = nil
|
||||
allRoles, err := auth_service.GetRoleList()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
roles, err := GetAdminRole(userEntity.Id, allRoles)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
//角色
|
||||
userInfo["roles"] = roles
|
||||
//岗位
|
||||
posts, err := GetPostsByUserId(userEntity.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
userInfo["posts"] = posts
|
||||
//部门
|
||||
if dept_info, err := sys_dept.GetDeptById(userEntity.DeptId); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
userInfo["dept_info"] = dept_info
|
||||
}
|
||||
|
||||
return userInfo, nil
|
||||
|
||||
}
|
||||
|
||||
func GetPostsByUserId(id int) ([]*sys_post.Entity, error) {
|
||||
return user_post.GetPostsByUserId(id)
|
||||
}
|
||||
|
||||
//获取登陆用户ID
|
||||
func GetLoginID(r *ghttp.Request) (userId int) {
|
||||
userInfo := GetLoginAdminInfo(r)
|
||||
@@ -31,9 +124,35 @@ func GetLoginAdminInfo(r *ghttp.Request) (userInfo *user.Entity) {
|
||||
return
|
||||
}
|
||||
|
||||
//获取当前登录用户信息,直接从数据库获取
|
||||
func GetCurrentUser(r *ghttp.Request) (userInfo *user.Entity, err error) {
|
||||
id := GetLoginID(r)
|
||||
userInfo, err = user.GetUserById(id)
|
||||
return
|
||||
}
|
||||
|
||||
//获取管理员列表
|
||||
func GetAdminList(where g.Map, page int) (total int, userList []*user.Entity, err error) {
|
||||
return user.GetAdminList(where, page, service.AdminPageNum)
|
||||
func GetAdminList(req *user.SearchReq) (total, page int, userList []*user.Entity, err error) {
|
||||
if req.PageSize == 0 {
|
||||
req.PageSize = service.AdminPageNum
|
||||
}
|
||||
var depts []*sys_dept.Dept
|
||||
if req.DeptId != "" {
|
||||
depts, err = sys_dept.GetList(&sys_dept.SearchParams{Status: "1"})
|
||||
if err != nil {
|
||||
g.Log().Debug(err)
|
||||
err = gerror.New("获取部门信息失败")
|
||||
return
|
||||
}
|
||||
mDepts := gconv.SliceMap(depts)
|
||||
deptId := gconv.Int(req.DeptId)
|
||||
req.DeptIds = append(req.DeptIds, deptId)
|
||||
childrenIds := utils.FindSonByParentId(mDepts, deptId, "parentId", "deptId")
|
||||
for _, d := range childrenIds {
|
||||
req.DeptIds = append(req.DeptIds, gconv.Int(d["deptId"]))
|
||||
}
|
||||
}
|
||||
return user.GetAdminList(req)
|
||||
}
|
||||
|
||||
//获取管理员的角色信息
|
||||
@@ -72,6 +191,10 @@ func GetAdminRoleIds(userId int) (roleIds []int, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func GetAdminPosts(userId int) (postIds []int64, err error) {
|
||||
return user_post.GetAdminPosts(userId)
|
||||
}
|
||||
|
||||
//获取菜单
|
||||
func GetAllMenus() (menus g.List, err error) {
|
||||
//获取所有开启的菜单
|
||||
@@ -82,10 +205,10 @@ func GetAllMenus() (menus g.List, err error) {
|
||||
menus = make(g.List, len(allMenus))
|
||||
for k, v := range allMenus {
|
||||
menu := gconv.Map(v)
|
||||
menu["index"] = v.Name
|
||||
menu = setMenuMap(menu, v)
|
||||
menus[k] = menu
|
||||
}
|
||||
menus = utils.PushSonToParent(menus, 0, "pid", "id", "subs", "", nil, false)
|
||||
menus = utils.PushSonToParent(menus, 0, "pid", "id", "children", "", nil, true)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -115,10 +238,49 @@ func GetAdminMenusByRoleIds(roleIds []int) (menus g.List, err error) {
|
||||
for _, v := range allMenus {
|
||||
if _, ok := menuIds[gconv.Int64(v.Id)]; gstr.Equal(v.Condition, "nocheck") || ok {
|
||||
roleMenu := gconv.Map(v)
|
||||
roleMenu["index"] = v.Name
|
||||
roleMenu = setMenuMap(roleMenu, v)
|
||||
roleMenus = append(roleMenus, roleMenu)
|
||||
}
|
||||
}
|
||||
menus = utils.PushSonToParent(roleMenus, 0, "pid", "id", "subs", "", nil, false)
|
||||
menus = utils.PushSonToParent(roleMenus, 0, "pid", "id", "children", "", nil, true)
|
||||
return
|
||||
}
|
||||
|
||||
//组合返回menu前端数据
|
||||
func setMenuMap(menu g.Map, entity *auth_rule.Entity) g.Map {
|
||||
menu["index"] = entity.Name
|
||||
menu["name"] = gstr.UcFirst(entity.Path)
|
||||
menu["menuName"] = entity.Title
|
||||
if entity.MenuType != 0 {
|
||||
menu["component"] = entity.Name
|
||||
menu["path"] = entity.Path
|
||||
} else {
|
||||
menu["path"] = "/" + entity.Path
|
||||
menu["component"] = "Layout"
|
||||
}
|
||||
menu["meta"] = g.MapStrStr{
|
||||
"icon": entity.Icon,
|
||||
"title": entity.Title,
|
||||
}
|
||||
if entity.AlwaysShow == 1 {
|
||||
menu["hidden"] = false
|
||||
} else {
|
||||
menu["hidden"] = true
|
||||
}
|
||||
if entity.AlwaysShow == 1 && entity.MenuType == 0 {
|
||||
menu["alwaysShow"] = true
|
||||
} else {
|
||||
menu["alwaysShow"] = false
|
||||
}
|
||||
return menu
|
||||
}
|
||||
|
||||
func ChangeUserStatus(req *user.StatusReq) error {
|
||||
return user.ChangeUserStatus(req)
|
||||
}
|
||||
|
||||
func ResetUserPwd(req *user.ResetPwdReq) error {
|
||||
//密码加密
|
||||
req.Password = utils.EncryptCBC(gconv.String(req.Password), utils.AdminCbcPublicKey)
|
||||
return user.ResetUserPwd(req)
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ const (
|
||||
AdminAuthMenu = iota
|
||||
AdminAuthRole
|
||||
AdminCmsMenu
|
||||
AdminConfigDict
|
||||
)
|
||||
|
||||
//缓存TAG标签
|
||||
|
||||
Reference in New Issue
Block a user