瀏覽代碼

升级gtoken,service与model整合

yxh 6 年之前
父節點
當前提交
5d7622f81f

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

@@ -4,7 +4,7 @@ import (
 	"gfast/app/service/admin/auth_service"
 	"gfast/app/service/admin/user_service"
 	"gfast/library/response"
-	"gfast/library/utils"
+	"gfast/library/service"
 	"github.com/gogf/gf/frame/g"
 	"github.com/gogf/gf/net/ghttp"
 	"github.com/gogf/gf/util/gconv"
@@ -25,7 +25,7 @@ func (c *Index) Index(r *ghttp.Request) {
 		userId := userEntity.Id
 		delete(userInfo, "user_password")
 		//获取无需验证权限的用户id
-		for _, v := range utils.NotCheckAuthAdminIds {
+		for _, v := range service.NotCheckAuthAdminIds {
 			if v == userId {
 				isSuperAdmin = true
 				break

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

@@ -2,7 +2,7 @@ package admin
 
 import (
 	"gfast/library/response"
-	"gfast/library/utils"
+	"gfast/library/service"
 	"github.com/gogf/gf/frame/g"
 	"github.com/gogf/gf/net/ghttp"
 )
@@ -11,6 +11,6 @@ type Public struct{}
 
 //获取验证码图片信息
 func (p *Public) Verify(r *ghttp.Request) {
-	idKeyC, base64stringC := utils.GetVerifyImgString()
+	idKeyC, base64stringC := service.GetVerifyImgString()
 	response.SusJson(true, r, "ok", g.MapStrStr{"idKeyC": idKeyC, "base64stringC": base64stringC})
 }

+ 83 - 0
app/model/admin/auth_rule/auth_rule.go

@@ -1,5 +1,13 @@
 package auth_rule
 
+import (
+	"gfast/app/service/cache_service"
+	"gfast/library/utils"
+	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/os/gtime"
+	"github.com/gogf/gf/util/gconv"
+)
+
 //菜单对象
 type MenuReq struct {
 	IsMenu    int    `p:"ismenu" c:"ismenu" v:"min:0|max:1#菜单类型最小值为:min|菜单类型最大值为:max"`
@@ -12,3 +20,78 @@ type MenuReq struct {
 	Remark    string `p:"remark" c:"remark"`
 	Status    int    `p:"status" c:"status"`
 }
+
+//获取所有菜单
+func GetMenuList() (list []*Entity, err error) {
+	cache := cache_service.New()
+	//从缓存获取
+	iList := cache.Get(cache_service.AdminAuthMenu)
+	if iList != nil {
+		list = iList.([]*Entity)
+		return
+	}
+	//从数据库获取
+	list, err = Model.Order("weigh desc,id asc").FindAll()
+	if err != nil {
+		return
+	}
+	//缓存菜单
+	cache.Set(cache_service.AdminAuthMenu, list, 0, cache_service.AdminAuthTag)
+	return
+}
+
+//检查菜单规则是否存在
+func CheckMenuNameUnique(name string, id int) bool {
+	model := Model.Where("name=?", name)
+	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)
+	now := gtime.Timestamp()
+	menuMap["createtime"] = now
+	menuMap["updatetime"] = now
+	res, e := Model.Insert(menuMap)
+	err = e
+	insertId, _ = res.LastInsertId()
+	return
+}
+
+//修改菜单操作
+func Edit(req *MenuReq, id int) (err error, rows int64) {
+	menuMap := gconv.Map(req)
+	now := gtime.Timestamp()
+	menuMap["updatetime"] = now
+	res, e := Model.Where("id=?", id).Update(menuMap)
+	err = e
+	rows, _ = res.RowsAffected()
+	return
+}
+
+//删除菜单
+func DeleteByIds(ids []int) (err error) {
+	//获取菜单数据
+	menus, err := GetMenuList()
+	if err != nil {
+		return
+	}
+	menuList := gconv.SliceMap(menus)
+	son := make(g.List, 0, len(menuList))
+	for _, id := range ids {
+		son = append(son, utils.FindSonByParentId(menuList, id, "pid", "id")...)
+	}
+	for _, v := range son {
+		ids = append(ids, gconv.Int(v["id"]))
+	}
+	_, err = Model.Where("id in (?)", ids).Delete()
+	return
+}

+ 138 - 0
app/model/admin/cms_category/cms_category.go

@@ -1,5 +1,13 @@
 package cms_category
 
+import (
+	"gfast/app/service/cache_service"
+	"github.com/gogf/gf/errors/gerror"
+	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/text/gstr"
+	"github.com/gogf/gf/util/gconv"
+)
+
 // Fill with you ideas below.
 const (
 	ChannelCateType = 1 //频道类型
@@ -34,3 +42,133 @@ type ReqEdit struct {
 	Id int `p:"id" v:"required|min:1#栏目id不能为空|栏目id参数错误"`
 	ReqAdd
 }
+
+//获取所有菜单列表
+func GetList() (list []*Entity, err error) {
+	cache := cache_service.New()
+	//从缓存获取数据
+	iList := cache.Get(cache_service.AdminCmsMenu)
+	if iList != nil {
+		list = iList.([]*Entity)
+		return
+	}
+	list, err = Model.Order("list_order ASC,id ASC").All()
+	if err != nil {
+		g.Log().Error()
+		err = gerror.New("获取菜单数据失败")
+	}
+	//缓存数据
+	cache.Set(cache_service.AdminCmsMenu, list, 0, cache_service.AdminCmsTag)
+	return
+}
+
+//获取频道列表
+func GetListChannel() (list []*Entity, err error) {
+	listAll, err := GetList()
+	if err != nil {
+		return
+	}
+	list = make([]*Entity, 0, len(listAll))
+	for _, v := range listAll {
+		if v.Status == 1 && v.CateType == ChannelCateType {
+			list = append(list, v)
+		}
+	}
+	return
+}
+
+//保存栏目操作
+func AddSave(req *ReqAdd) (id int64, err error) {
+	var entity Entity
+	entity.ParentId = req.ParentId
+	entity.CateType = req.CateType
+	entity.Status = req.Status
+	entity.Name = req.Name
+	entity.Description = req.Description
+	entity.SeoTitle = req.InputSeoTitle
+	entity.SeoKeywords = req.InputSeoKeywords
+	entity.SeoDescription = req.InputSeoDescription
+	entity.CateAddress = req.CateAddress
+	entity.CateContent = req.CateContent
+	res, err := entity.Insert()
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("保存失败")
+		return
+	}
+	id, err = res.LastInsertId()
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("保存失败")
+		return
+	}
+	return
+}
+
+//根据栏目ID获取栏目信息
+func GetInfoById(id int) (menu *Entity, err error) {
+	menus, err := GetList()
+	if err != nil {
+		return
+	}
+	for _, entity := range menus {
+		if entity.Id == gconv.Uint64(id) {
+			menu = entity
+			break
+		}
+	}
+	return
+}
+
+//修改栏目操作
+func EditSave(req *ReqEdit) (id int64, err error) {
+	entity, err := GetInfoById(req.Id)
+	if err != nil {
+		return
+	}
+	if entity == nil {
+		err = gerror.New("栏目信息不存在")
+		return
+	}
+	entity.Id = gconv.Uint64(req.Id)
+	entity.ParentId = req.ParentId
+	entity.CateType = req.CateType
+	entity.Status = req.Status
+	entity.Name = req.Name
+	entity.Description = req.Description
+	entity.SeoTitle = req.InputSeoTitle
+	entity.SeoKeywords = req.InputSeoKeywords
+	entity.SeoDescription = req.InputSeoDescription
+	entity.CateAddress = req.CateAddress
+	entity.CateContent = req.CateContent
+	res, err := entity.Update()
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("修改保存失败")
+		return
+	}
+	id, err = res.RowsAffected()
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("修改保存失败")
+		return
+	}
+	return
+}
+
+//获取搜索栏目结果
+func GetListSearch(req *ReqSearchList) (menus []*Entity, err error) {
+	menus, err = GetList()
+	if req != nil {
+		searchMenus := make([]*Entity, 0, len(menus))
+		if req.Name != "" {
+			for _, entity := range menus {
+				if gstr.Contains(entity.Name, req.Name) {
+					searchMenus = append(searchMenus, entity)
+				}
+			}
+		}
+		menus = searchMenus
+	}
+	return
+}

+ 162 - 0
app/model/admin/role/role.go

@@ -0,0 +1,162 @@
+package role
+
+import (
+	"database/sql"
+	"errors"
+	"fmt"
+	"gfast/app/service/cache_service"
+	"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/os/gtime"
+	"github.com/gogf/gf/util/gconv"
+	"github.com/gogf/gf/util/gvalid"
+)
+
+//获取用户组(角色)列表
+func GetList() (list []*Entity, err error) {
+	cache := cache_service.New()
+	//从缓存获取
+	iList := cache.Get(cache_service.AdminAuthRole)
+	if iList != nil {
+		list = iList.([]*Entity)
+		return
+	}
+	//从数据库获取
+	list, err = Model.OrderBy("list_order asc,id asc").All()
+	//缓存数据
+	cache.Set(cache_service.AdminAuthRole, list, 0, cache_service.AdminAuthTag)
+	return
+}
+
+func checkRoleData(params map[string]interface{}) error {
+	rules := []string{
+		"name@required|length:1,20#请填写角色名称|名称应在:min到:max个字符之间",
+		"parent_id@integer|min:0#父级ID必须为整数|父级ID必须大于等于0",
+	}
+
+	e := gvalid.CheckMap(params, rules)
+	if e != nil {
+		return e
+	}
+	return nil
+}
+
+//保存角色信息并返回插入的id
+func Add(tx *gdb.TX, data map[string]interface{}) (InsId int64, err error) {
+	if e := checkRoleData(data); e != nil {
+		err = gerror.New(e.(*gvalid.Error).FirstString())
+		return
+	}
+	//保存角色信息
+	now := gtime.Timestamp()
+	roleMap := gdb.Map{
+		"parent_id":   data["parent_id"],
+		"status":      data["status"],
+		"name":        data["name"],
+		"create_time": now,
+		"update_time": now,
+		"list_order":  data["list_order"],
+		"remark":      data["remark"],
+	}
+	var res sql.Result
+	res, err = tx.Table(Table).Data(roleMap).Save()
+	if err != nil {
+		return
+	}
+	InsId, _ = res.LastInsertId()
+	return
+}
+
+//修改角色信息操作
+func Edit(tx *gdb.TX, data map[string]interface{}) (err error) {
+	if _, k := data["id"]; !k {
+		err = errors.New("缺少更新条件Id")
+		return
+	}
+	if e := checkRoleData(data); e != nil {
+		err = gerror.New(e.(*gvalid.Error).FirstString())
+		return
+	}
+	//保存角色信息
+	now := gtime.Timestamp()
+	roleMap := gdb.Map{
+		"id":          data["id"],
+		"parent_id":   data["parent_id"],
+		"status":      data["status"],
+		"name":        data["name"],
+		"update_time": now,
+		"list_order":  data["list_order"],
+		"remark":      data["remark"],
+	}
+	_, err = tx.Table(Table).Data(roleMap).Save()
+	if err != nil {
+		return
+	}
+	return
+}
+
+//删除角色权限操作
+func DeleteRoleRule(roleId int) (err error) {
+	enforcer, e := casbin_adapter_service.GetEnforcer()
+	if e != nil {
+		err = e
+		return
+	}
+	//查询当前权限
+	gp := enforcer.GetFilteredNamedPolicy("p", 0, fmt.Sprintf("g_%d", roleId))
+	//删除旧权限
+	for _, v := range gp {
+		_, e = enforcer.RemovePolicy(v)
+		if e != nil {
+			err = e
+			return
+		}
+	}
+	return
+}
+
+func DeleteByIds(ids []int) (err error) {
+	//查询所有子级id
+	roleAllEntity, err := GetList()
+	if err != nil {
+		g.Log().Debug(err)
+		err = gerror.New("删除失败,不存在角色信息")
+		return
+	}
+	roleAll := gconv.SliceMap(roleAllEntity)
+	sonList := make(g.List, 0, len(roleAll))
+	for _, id := range ids {
+		sonList = append(sonList, utils.FindSonByParentId(roleAll, id, "parent_id", "id")...)
+	}
+	for _, role := range sonList {
+		ids = append(ids, gconv.Int(role["id"]))
+	}
+	tx, err := g.DB("default").Begin() //开启事务
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("事务处理失败")
+		return
+	}
+	_, err = tx.Table(Table).Where("id in(?)", ids).Delete()
+	if err != nil {
+		g.Log().Error(err)
+		tx.Rollback()
+		err = gerror.New("删除失败")
+		return
+	}
+	//删除角色的权限
+	for _, v := range ids {
+		err = DeleteRoleRule(v)
+		if err != nil {
+			g.Log().Error(err)
+			tx.Rollback()
+			err = gerror.New("删除失败")
+			return
+		}
+	}
+	tx.Commit()
+	return
+}

+ 150 - 0
app/model/admin/sys_config/sys_config.go

@@ -1,5 +1,14 @@
 package sys_config
 
+import (
+	"gfast/library/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"
+)
+
 // Fill with you ideas below.
 //新增页面请求参数
 type AddReq struct {
@@ -26,3 +35,144 @@ type SelectPageReq struct {
 	PageNum    int    `p:"page"`       //当前页码
 	PageSize   int    `p:"pageSize"`   //每页数
 }
+
+//保存参数
+func AddSave(req *AddReq, userId int) (id int64, err error) {
+	var entity Entity
+	entity.ConfigName = req.ConfigName
+	entity.ConfigKey = req.ConfigKey
+	entity.ConfigType = req.ConfigType
+	entity.ConfigValue = req.ConfigValue
+	entity.Remark = req.Remark
+	entity.CreateTime = gconv.Uint64(gtime.Timestamp())
+	entity.CreateBy = gconv.Uint(userId)
+	result, err := entity.Insert()
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("保存失败")
+	}
+	id, err = result.LastInsertId()
+	if err != nil {
+		g.Log().Error()
+		err = gerror.New("获取插入的主键ID失败")
+	}
+	return
+}
+
+//修改保存
+func EditSave(req *EditReq, userId int) (int64, error) {
+	entity, err := GetParamsById(gconv.Int(req.ConfigId))
+	if err != nil {
+		return 0, err
+	}
+	entity.ConfigName = req.ConfigName
+	entity.ConfigKey = req.ConfigKey
+	entity.ConfigType = req.ConfigType
+	entity.ConfigValue = req.ConfigValue
+	entity.Remark = req.Remark
+	entity.UpdateTime = gconv.Uint64(gtime.Timestamp())
+	entity.UpdateBy = gconv.Uint(userId)
+	result, err := entity.Update()
+	if err != nil {
+		g.Log().Error(err)
+		return 0, gerror.New("修改失败")
+	}
+	rows, err := result.RowsAffected()
+	if err != nil {
+		g.Log().Error(err)
+		return 0, gerror.New("修改失败")
+	}
+	return rows, nil
+}
+
+//通过id查询参数数据
+func GetParamsById(id int) (entity *Entity, err error) {
+	entity, err = Model.FindOne("config_id", id)
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("查询参数数据出错")
+	}
+	if entity == nil {
+		err = gerror.New("未查询到参数数据")
+	}
+	return
+}
+
+//验证参数键名是否存在
+func CheckConfigKeyUniqueAll(configKey string) error {
+	entity, err := Model.FindOne("config_key", configKey)
+	if err != nil {
+		g.Log().Error(err)
+		return gerror.New("校验数据失败")
+	}
+	if entity != nil {
+		return gerror.New("参数键名已经存在")
+	}
+	return nil
+}
+
+//列表分页搜索查询
+func SelectListByPage(req *SelectPageReq) (total, page int, list []*Entity, err error) {
+	model := Model
+	if req != nil {
+		if req.ConfigName != "" {
+			model = model.Where("config_name like ?", "%"+req.ConfigName+"%")
+		}
+		if req.ConfigType != "" {
+			model.Where("status = ", gconv.Int(req.ConfigType))
+		}
+		if req.ConfigKey != "" {
+			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))
+		}
+	}
+	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("config_id asc").All()
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("获取数据失败")
+		return
+	}
+	return
+}
+
+//检查键是否已经存在
+func CheckConfigKeyUnique(configKey string, configId int64) error {
+	entity, err := Model.FindOne("config_key=? and config_id!=?", configKey, configId)
+	if err != nil {
+		g.Log().Error(err)
+		return gerror.New("校验数据失败")
+	}
+	if entity != nil {
+		return gerror.New("参数键名已经存在")
+	}
+	return nil
+}
+
+//删除参数
+func DeleteByIds(ids []int) error {
+	_, err := Model.Delete("config_id in (?)", ids)
+	if err != nil {
+		g.Log().Error(err)
+		return gerror.New("删除失败")
+	}
+	return nil
+}

+ 119 - 0
app/model/admin/sys_dict_data/sys_dict_data.go

@@ -1,5 +1,13 @@
 package sys_dict_data
 
+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"
+)
+
 // Fill with you ideas below.
 
 //新增字典数据页面请求参数
@@ -28,3 +36,114 @@ type SelectDataPageReq struct {
 	PageNum   int    `p:"page"`      //当前页码
 	PageSize  int    `p:"pageSize"`  //每页数
 }
+
+//添加字典数据操作
+func AddSaveData(req *AddDataReq, userId int) (int64, error) {
+	var entity Entity
+	entity.DictType = req.DictType
+	entity.Status = req.Status
+	entity.DictLabel = req.DictLabel
+	entity.CssClass = req.CssClass
+	entity.DictSort = req.DictSort
+	entity.DictValue = req.DictValue
+	entity.IsDefault = req.IsDefault
+	entity.ListClass = req.ListClass
+	entity.Remark = req.Remark
+	entity.CreateTime = gconv.Uint64(gtime.Timestamp())
+	entity.CreateBy = userId
+	result, err := entity.Insert()
+	if err != nil {
+		g.Log().Error(err)
+		return 0, gerror.New("添加失败")
+	}
+	id, err := result.LastInsertId()
+	if err != nil {
+		g.Log().Error(err)
+		return 0, gerror.New("添加失败")
+	}
+	return id, nil
+}
+
+//通过字典数据主键获取数据
+func GetById(dictCode int) (*Entity, error) {
+	entity, err := Model.FindOne("dict_code", dictCode)
+	if err != nil {
+		g.Log().Error(err)
+		return nil, gerror.New("获取字典数据失败")
+	}
+	if entity == nil {
+		return nil, gerror.New("获取字典数据失败")
+	}
+	return entity, nil
+}
+
+//修改字典数据操作
+func EditSaveData(req *EditDataReq, userId int) (int64, error) {
+	entity, err := GetById(req.DictCode)
+	if err != nil {
+		return 0, err
+	}
+	entity.DictType = req.DictType
+	entity.Status = req.Status
+	entity.DictLabel = req.DictLabel
+	entity.CssClass = req.CssClass
+	entity.DictSort = req.DictSort
+	entity.DictValue = req.DictValue
+	entity.IsDefault = req.IsDefault
+	entity.ListClass = req.ListClass
+	entity.Remark = req.Remark
+	entity.UpdateTime = gconv.Uint64(gtime.Timestamp())
+	entity.UpdateBy = userId
+	result, err := entity.Update()
+	if err != nil {
+		g.Log().Error(err)
+		return 0, gerror.New("修改失败")
+	}
+	return result.RowsAffected()
+}
+
+//字典数据列表查询分页
+func SelectDataListByPage(req *SelectDataPageReq) (total, page int, list []*Entity, err error) {
+	model := Model
+	if req != nil {
+		if req.DictLabel != "" {
+			model = model.Where("dict_label like ?", "%"+req.DictLabel+"%")
+		}
+		if req.Status != "" {
+			model = model.Where("status = ", gconv.Int(req.Status))
+		}
+		if req.DictType != "" {
+			model = model.Where("dict_type = ?", req.DictType)
+		}
+		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("dict_sort asc,dict_code asc").All()
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("获取数据失败")
+		return
+	}
+	return
+}
+
+//删除字典数据
+func DeleteByIds(ids []int) error {
+	_, err := Model.Delete("dict_code in (?)", ids)
+	if err != nil {
+		g.Log().Error(err)
+		return gerror.New("删除失败")
+	}
+	return nil
+}

+ 200 - 0
app/model/admin/sys_dict_type/sys_dict_type.go

@@ -1,5 +1,16 @@
 package sys_dict_type
 
+import (
+	"gfast/app/model/admin/sys_dict_data"
+	"gfast/library/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/text/gstr"
+	"github.com/gogf/gf/util/gconv"
+)
+
 // Fill with you ideas below.
 
 //新增操作请求参数
@@ -26,3 +37,192 @@ type SelectPageReq struct {
 	PageNum   int    `p:"page"`      //当前页码
 	PageSize  int    `p:"pageSize"`  //每页数
 }
+
+//添加数据
+func AddSave(req *AddReq, userId int) (int64, error) {
+	var entity Entity
+	entity.Status = req.Status
+	entity.DictType = req.DictType
+	entity.DictName = req.DictName
+	entity.Remark = req.Remark
+	entity.CreateTime = gconv.Uint64(gtime.Timestamp())
+	entity.CreateBy = gconv.Uint(userId)
+
+	result, err := entity.Insert()
+	if err != nil {
+		return 0, err
+	}
+	id, err := result.LastInsertId()
+	if err != nil || id <= 0 {
+		return 0, err
+	}
+	return id, nil
+}
+
+//通过id获取字典数据
+func GetDictById(id int) (dict *Entity, err error) {
+	dict, err = Model.FindOne("dict_id=?", id)
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("获取字典数据失败")
+		return
+	}
+	if dict == nil {
+		err = gerror.New("获取字典数据失败")
+		return
+	}
+	return
+}
+
+//修改保存字典类型
+func EditSave(req *EditReq, userId int) (int64, error) {
+	entity, err := GetDictById(gconv.Int(req.DictId))
+	if err != nil || entity == nil {
+		return 0, err
+	}
+	entity.DictType = req.DictType
+	entity.DictName = req.DictName
+	entity.Status = req.Status
+	entity.Remark = req.Remark
+	entity.UpdateBy = gconv.Uint(userId)
+	entity.UpdateTime = gconv.Uint64(gtime.Timestamp())
+	res, err := entity.Update()
+	if err != nil {
+		g.Log().Error(err)
+		return 0, gerror.New("更新失败")
+	}
+	return res.RowsAffected()
+}
+
+//根据主键判断是否唯一
+func CheckDictTypeUnique(dictType *EditReq) bool {
+	dict, err := Model.FindOne("dict_type=? and dict_id!=?", dictType.DictType, dictType.DictId)
+	if err != nil {
+		g.Log().Error(err)
+		return false
+	}
+	if dict != nil {
+		return false
+	}
+	return true
+}
+
+//检查字典类型是否唯一
+func CheckDictTypeUniqueAll(dictType string) bool {
+	dict, err := Model.FindOne("dict_type=?", dictType)
+	if err != nil {
+		g.Log().Error(err)
+		return false
+	}
+	if dict != nil {
+		return false
+	}
+	return true
+}
+
+//字典列表查询分页
+func SelectListByPage(req *SelectPageReq) (total, page int, list []*Entity, err error) {
+	model := Model
+	if req != nil {
+		if req.DictName != "" {
+			model = model.Where("dict_name like ?", "%"+req.DictName+"%")
+		}
+
+		if req.DictType != "" {
+			model = model.Where("dict_type like ?", "%"+req.DictType+"%")
+		}
+
+		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("dict_id asc").All()
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("获取数据失败")
+		return
+	}
+	return
+}
+
+//通过字典键类型获取选项
+func GetDictWithDataByType(dictType, defaultValue, emptyLabel string) (dict g.Map, err error) {
+	dictEntity, err := Model.FindOne("dict_type", dictType)
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("获取字典选项失败")
+		return
+	}
+	var dictDataEntities []*sys_dict_data.Entity
+	if dictEntity != nil {
+		//获取字典数据
+		dictDataEntities, err = sys_dict_data.Model.Where("dict_type", dictType).
+			Order("dict_sort ASC,dict_code ASC").All()
+		if err != nil {
+			g.Log().Error(err)
+			err = gerror.New("获取字典选项失败")
+			return
+		}
+		values := make(g.List, len(dictDataEntities))
+		for k, v := range dictDataEntities {
+			isDefault := 0
+			if defaultValue != "" {
+				if gstr.Equal(defaultValue, v.DictValue) {
+					isDefault = 1
+				}
+			} else if emptyLabel == "" {
+				isDefault = v.IsDefault
+			}
+			values[k] = g.Map{
+				"key":       v.DictValue,
+				"value":     v.DictLabel,
+				"isDefault": isDefault,
+			}
+		}
+		if emptyLabel != "" {
+			values = append(g.List{g.Map{"isDefault": 0, "key": "", "value": emptyLabel}}, values...)
+		}
+		dict = g.Map{
+			"dict_name": dictEntity.DictName,
+			"remark":    dictEntity.Remark,
+			"values":    values,
+		}
+	}
+	return
+}
+
+//删除字典
+func DeleteDictByIds(ids []int) error {
+	discs, err := Model.Where("dict_id in(?)", ids).All()
+	if err != nil {
+		g.Log().Error(err)
+		return gerror.New("没有要删除的数据")
+	}
+	//删除字典下的数据
+	for _, v := range discs {
+		sys_dict_data.Model.Delete("dict_type=?", v.DictType)
+		v.Delete()
+	}
+	return nil
+}

+ 185 - 0
app/model/admin/sys_job/sys_job.go

@@ -1,5 +1,16 @@
 package sys_job
 
+import (
+	"gfast/app/task"
+	"gfast/library/service"
+	"github.com/gogf/gf/errors/gerror"
+	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/os/gcron"
+	"github.com/gogf/gf/os/gtime"
+	"github.com/gogf/gf/util/gconv"
+	"strings"
+)
+
 // Fill with you ideas below.
 
 //添加操作请求参数
@@ -29,3 +40,177 @@ type SelectPageReq struct {
 	PageNum  int    `p:"page"`     //当前页码
 	PageSize int    `p:"pageSize"` //每页数
 }
+
+func GetJobs() (jobs []*Entity, err error) {
+	jobs, err = Model.Where("status", 0).All()
+	return
+}
+
+//添加计划任务
+func Add(req *ReqAdd, userId int) (id int64, err error) {
+	entity := new(Entity)
+	entity.JobName = req.JobName
+	entity.JobGroup = req.JobGroup
+	entity.InvokeTarget = req.InvokeTarget
+	entity.JobParams = req.JobParams
+	entity.CronExpression = req.CronExpression
+	entity.MisfirePolicy = req.MisfirePolicy
+	entity.Remark = req.Remark
+	entity.Status = req.Status
+	entity.CreateTime = gconv.Uint64(gtime.Timestamp())
+	entity.CreateBy = gconv.Uint64(userId)
+	res, err := entity.Save()
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("添加任务失败")
+	}
+	id, err = res.LastInsertId()
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("添加任务失败")
+	}
+	return
+}
+
+//通过id获取任务信息
+func GetJobInfoById(id int64) (job *Entity, err error) {
+	if id == 0 {
+		err = gerror.New("参数错误")
+		return
+	}
+	job, err = Model.FindOne("job_id", id)
+	if err != nil {
+		g.Log().Error(err)
+	}
+	if job == nil || err != nil {
+		err = gerror.New("获取任务信息失败")
+		return
+	}
+	return
+}
+
+//修改计划任务
+func Edit(req *ReqEdit, userId int) (rows int64, err error) {
+	entity, err := GetJobInfoById(req.JobId)
+	if err != nil {
+		return
+	}
+	entity.JobName = req.JobName
+	entity.JobGroup = req.JobGroup
+	entity.InvokeTarget = req.InvokeTarget
+	entity.JobParams = req.JobParams
+	entity.CronExpression = req.CronExpression
+	entity.MisfirePolicy = req.MisfirePolicy
+	entity.Remark = req.Remark
+	entity.Status = req.Status
+	entity.UpdateTime = gconv.Uint64(gtime.Timestamp())
+	entity.UpdateBy = gconv.Uint64(userId)
+	res, err := entity.Update()
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("修改任务失败")
+	}
+	rows, err = res.RowsAffected()
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("修改任务失败")
+	}
+	return
+}
+
+//任务列表
+func JobListByPage(req *SelectPageReq) (total, page int, list []*Entity, err error) {
+	model := Model
+	if req != nil {
+		if req.Status != "" {
+			model = model.Where("status", gconv.Int(req.Status))
+		}
+		if req.JobGroup != "" {
+			model = model.Where("job_group", req.JobGroup)
+		}
+		if req.JobName != "" {
+			model = model.Where("job_name like ?", "%"+req.JobName+"%")
+		}
+	}
+	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("job_id asc").All()
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("获取数据失败")
+		return
+	}
+	return
+}
+
+//批量删除计划任务
+func DeleteJobByIds(ids []int) (err error) {
+	if len(ids) == 0 {
+		err = gerror.New("参数错误")
+	}
+	_, err = Model.Delete("job_id in (?)", ids)
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("删除失败")
+	}
+	return
+}
+
+//启动任务
+func JobStart(job *Entity) error {
+	//可以task目录下是否绑定对应的方法
+	f := task.GetByName(job.InvokeTarget)
+	if f == nil {
+		return gerror.New("当前task目录下没有绑定这个方法")
+	}
+	//传参
+	paramArr := strings.Split(job.JobParams, "|")
+	task.EditParams(f.FuncName, paramArr)
+	rs := gcron.Search(job.InvokeTarget)
+	if rs == nil {
+		if job.MisfirePolicy == 1 {
+			task, err := gcron.Add(job.CronExpression, f.Run, job.InvokeTarget)
+			if err != nil || task == nil {
+				return err
+			}
+		} else {
+			task, err := gcron.AddOnce(job.CronExpression, f.Run, job.InvokeTarget)
+			if err != nil || task == nil {
+				return err
+			}
+		}
+	}
+	gcron.Start(job.InvokeTarget)
+	if job.MisfirePolicy == 1 {
+		job.Status = 0
+		job.Update()
+	}
+	return nil
+}
+
+//停止任务
+func JobStop(job *Entity) error {
+	//可以task目录下是否绑定对应的方法
+	f := task.GetByName(job.InvokeTarget)
+	if f == nil {
+		return gerror.New("当前task目录下没有绑定这个方法")
+	}
+	rs := gcron.Search(job.InvokeTarget)
+	if rs != nil {
+		gcron.Stop(job.InvokeTarget)
+	}
+	job.Status = 1
+	job.Update()
+	return nil
+}

+ 74 - 0
app/model/admin/sys_login_log/sys_login_log.go

@@ -1,5 +1,12 @@
 package sys_login_log
 
+import (
+	"gfast/library/utils"
+	"github.com/gogf/gf/errors/gerror"
+	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/util/gconv"
+)
+
 // Fill with you ideas below.
 //查询列表请求参数
 type SelectPageReq struct {
@@ -13,3 +20,70 @@ type SelectPageReq struct {
 	SortName  string `p:"orderByColumn"` //排序字段
 	SortOrder string `p:"isAsc"`         //排序方式
 }
+
+func LoginLogListByPage(req *SelectPageReq) (total, page int, list []*Entity, err error) {
+	model := Model
+	page = req.PageNum
+	order := "login_time DESC"
+
+	if req.LoginName != "" {
+		model = model.Where("login_name like ?", "%"+req.LoginName+"%")
+	}
+	if req.Status != "" {
+		model = model.Where("status", gconv.Int(req.Status))
+	}
+	if req.Ipaddr != "" {
+		model = model.Where("ipaddr like ?", "%"+req.Ipaddr+"%")
+	}
+	if req.BeginTime != "" {
+		model = model.Where("login_time >=", utils.StrToTimestamp(req.BeginTime))
+	}
+	if req.EndTime != "" {
+		model = model.Where("login_time <=", utils.StrToTimestamp(req.EndTime))
+	}
+	if req.SortName != "" {
+		if req.SortOrder != "" {
+			order = req.SortName + " " + req.SortOrder
+		} else {
+			order = req.SortName + " DESC"
+		}
+	}
+
+	total, err = model.Count()
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("获取总行数失败")
+		return
+	}
+	list, err = model.Page(page, req.PageSize).Order(order).All()
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("获取数据失败")
+		return
+	}
+	return
+}
+
+//删除登录日志
+func DeleteLoginLogByIds(ids []int) (err error) {
+	if len(ids) == 0 {
+		err = gerror.New("参数错误")
+		return
+	}
+	_, err = Model.Delete("info_id in (?)", ids)
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("删除失败")
+	}
+	return
+}
+
+//清空日志
+func ClearLoginLog() (err error) {
+	_, err = g.DB().Exec("truncate " + Table)
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("清除失败")
+	}
+	return
+}

+ 2 - 1
app/model/admin/sys_oper_log/sys_oper_log.go

@@ -3,6 +3,7 @@ package sys_oper_log
 import (
 	"gfast/app/model/admin/auth_rule"
 	"gfast/app/model/admin/user"
+	"gfast/library/service"
 	"gfast/library/utils"
 	"github.com/gogf/gf/encoding/gjson"
 	"github.com/gogf/gf/errors/gerror"
@@ -110,7 +111,7 @@ func ListByPage(req *SelectPageReq) (total, page int, list []*Entity, err error)
 	}
 	page = req.PageNum
 	if req.PageSize == 0 {
-		req.PageSize = utils.AdminPageNum
+		req.PageSize = service.AdminPageNum
 	}
 	list, err = model.Page(page, req.PageSize).FieldsEx("oper_param,json_result").Order(order).All()
 	if err != nil {

+ 94 - 0
app/model/admin/user/user.go

@@ -0,0 +1,94 @@
+package user
+
+import (
+	"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
+}
+
+//添加管理员操作
+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 {
+		err = gerror.New("用户名已经存在")
+		return
+	}
+	if i, _ := Model.Where("mobile=?", data["mobile"]).Count(); i != 0 {
+		err = gerror.New("手机号已经存在")
+		return
+	}
+	//保存管理员信息
+	data["create_time"] = gtime.Timestamp()
+	res, err := Model.Filter().Data(data).Save()
+	if err != nil {
+		return
+	}
+	InsertId, _ = res.LastInsertId()
+	return
+}
+
+//修改用户信息
+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 {
+		err = gerror.New("手机号已经存在")
+		return
+	}
+	//保存管理员信息
+	_, err = Model.Filter().Data(data).Save()
+	if err != nil {
+		return
+	}
+	return
+}
+
+//获取管理员列表
+func GetAdminList(where g.Map, page, pageNum int) (total 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)
+		}
+	}
+	total, err = userModel.Count()
+	userList, err = userModel.ForPage(page, pageNum).OrderBy("id asc").All()
+	return
+}

+ 40 - 0
app/model/admin/user_online/user_online.go

@@ -1,5 +1,10 @@
 package user_online
 
+import (
+	"github.com/gogf/gf/errors/gerror"
+	"github.com/gogf/gf/frame/g"
+)
+
 // Fill with you ideas below.
 //列表搜索参数
 type ReqListSearch struct {
@@ -8,3 +13,38 @@ type ReqListSearch struct {
 	PageNum  int    `p:"page"`     //当前页码
 	PageSize int    `p:"pageSize"` //每页数
 }
+
+//获取在线用户列表
+func GetOnlineListPage(req *ReqListSearch) (total, page int, list []*Entity, err error) {
+	page = req.PageNum
+	model := Model
+	if req.Ip != "" {
+		model = model.Where("ip like ?", "%"+req.Ip+"%")
+	}
+	if req.Username != "" {
+		model = model.Where("user_name like ?", "%"+req.Username+"%")
+	}
+	total, err = model.Count()
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("获取总行数失败")
+		return
+	}
+
+	list, err = model.FieldsEx("token").Page(page, req.PageSize).Order("create_time DESC").All()
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("获取数据失败")
+		return
+	}
+	return
+}
+
+func GetInfoById(id int) (entity *Entity, err error) {
+	entity, err = Model.FindOne("id", id)
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("获取在线用户信息失败")
+	}
+	return
+}

+ 12 - 250
app/service/admin/auth_service/auth_rule.go

@@ -1,21 +1,14 @@
 package auth_service
 
 import (
-	"database/sql"
-	"errors"
 	"fmt"
 	"gfast/app/model/admin/auth_rule"
 	"gfast/app/model/admin/role"
 	"gfast/app/model/admin/user"
-	"gfast/app/service/cache_service"
 	"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/os/gtime"
 	"github.com/gogf/gf/util/gconv"
-	"github.com/gogf/gf/util/gvalid"
 )
 
 //获取isMenu==1菜单列表
@@ -65,100 +58,32 @@ func GetMenuIsStatusList() ([]*auth_rule.Entity, error) {
 
 //获取所有菜单
 func GetMenuList() (list []*auth_rule.Entity, err error) {
-	cache := cache_service.New()
-	//从缓存获取
-	iList := cache.Get(cache_service.AdminAuthMenu)
-	if iList != nil {
-		list = iList.([]*auth_rule.Entity)
-		return
-	}
-	//从数据库获取
-	list, err = auth_rule.Model.Order("weigh desc,id asc").FindAll()
-	if err != nil {
-		return
-	}
-	//缓存菜单
-	cache.Set(cache_service.AdminAuthMenu, list, 0, cache_service.AdminAuthTag)
-	return
+	return auth_rule.GetMenuList()
 }
 
 //检查菜单规则是否存在
 func CheckMenuNameUnique(name string, id int) bool {
-	model := auth_rule.Model.Where("name=?", name)
-	if id != 0 {
-		model = model.And("id!=?", id)
-	}
-	c, err := model.Count()
-	if err != nil {
-		g.Log().Error(err)
-		return false
-	}
-	return c == 0
+	return auth_rule.CheckMenuNameUnique(name, id)
 }
 
 // 添加菜单操作
 func AddMenu(req *auth_rule.MenuReq) (err error, insertId int64) {
-	menuMap := gconv.Map(req)
-	now := gtime.Timestamp()
-	menuMap["createtime"] = now
-	menuMap["updatetime"] = now
-	res, e := auth_rule.Model.Insert(menuMap)
-	err = e
-	insertId, _ = res.LastInsertId()
-	return
+	return auth_rule.Add(req)
 }
 
 //修改菜单操作
 func EditMenu(req *auth_rule.MenuReq, id int) (err error, rows int64) {
-	menuMap := gconv.Map(req)
-	now := gtime.Timestamp()
-	menuMap["updatetime"] = now
-	res, e := auth_rule.Model.Where("id=?", id).Update(menuMap)
-	err = e
-	rows, _ = res.RowsAffected()
-	return
+	return auth_rule.Edit(req, id)
 }
 
 //获取用户组(角色)列表
 func GetRoleList() (list []*role.Entity, err error) {
-	cache := cache_service.New()
-	//从缓存获取
-	iList := cache.Get(cache_service.AdminAuthRole)
-	if iList != nil {
-		list = iList.([]*role.Entity)
-		return
-	}
-	//从数据库获取
-	list, err = role.Model.OrderBy("list_order asc,id asc").All()
-	//缓存数据
-	cache.Set(cache_service.AdminAuthRole, list, 0, cache_service.AdminAuthTag)
-	return
+	return role.GetList()
 }
 
 //保存角色信息并返回插入的id
 func AddRole(tx *gdb.TX, data map[string]interface{}) (InsId int64, err error) {
-	if e := checkRoleData(data); e != nil {
-		err = gerror.New(e.(*gvalid.Error).FirstString())
-		return
-	}
-	//保存角色信息
-	now := gtime.Timestamp()
-	roleMap := gdb.Map{
-		"parent_id":   data["parent_id"],
-		"status":      data["status"],
-		"name":        data["name"],
-		"create_time": now,
-		"update_time": now,
-		"list_order":  data["list_order"],
-		"remark":      data["remark"],
-	}
-	var res sql.Result
-	res, err = tx.Table(role.Table).Data(roleMap).Save()
-	if err != nil {
-		return
-	}
-	InsId, _ = res.LastInsertId()
-	return
+	return role.Add(tx, data)
 }
 
 //添加角色授权规则
@@ -180,30 +105,7 @@ func AddRoleRule(iRule interface{}, roleId int64) (err error) {
 
 //修改角色信息操作
 func EditRole(tx *gdb.TX, data map[string]interface{}) (err error) {
-	if _, k := data["id"]; !k {
-		err = errors.New("缺少更新条件Id")
-		return
-	}
-	if e := checkRoleData(data); e != nil {
-		err = gerror.New(e.(*gvalid.Error).FirstString())
-		return
-	}
-	//保存角色信息
-	now := gtime.Timestamp()
-	roleMap := gdb.Map{
-		"id":          data["id"],
-		"parent_id":   data["parent_id"],
-		"status":      data["status"],
-		"name":        data["name"],
-		"update_time": now,
-		"list_order":  data["list_order"],
-		"remark":      data["remark"],
-	}
-	_, err = tx.Table(role.Table).Data(roleMap).Save()
-	if err != nil {
-		return
-	}
-	return
+	return role.Edit(tx, data)
 }
 
 //修改角色的授权规则
@@ -235,91 +137,25 @@ func EditRoleRule(iRule interface{}, roleId int64) (err error) {
 
 //删除角色权限操作
 func DeleteRoleRule(roleId int) (err error) {
-	enforcer, e := casbin_adapter_service.GetEnforcer()
-	if e != nil {
-		err = e
-		return
-	}
-	//查询当前权限
-	gp := enforcer.GetFilteredNamedPolicy("p", 0, fmt.Sprintf("g_%d", roleId))
-	//删除旧权限
-	for _, v := range gp {
-		_, e = enforcer.RemovePolicy(v)
-		if e != nil {
-			err = e
-			return
-		}
-	}
-	return
-}
-
-func checkRoleData(params map[string]interface{}) error {
-	rules := []string{
-		"name@required|length:1,20#请填写角色名称|名称应在:min到:max个字符之间",
-		"parent_id@integer|min:0#父级ID必须为整数|父级ID必须大于等于0",
-	}
-
-	e := gvalid.CheckMap(params, rules)
-	if e != nil {
-		return e
-	}
-	return nil
+	return role.DeleteRoleRule(roleId)
 }
 
 //添加管理员操作
 func AddUser(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, _ := user.Model.Where("user_name=?", data["user_name"]).Count(); i != 0 {
-		err = gerror.New("用户名已经存在")
-		return
-	}
-	if i, _ := user.Model.Where("mobile=?", data["mobile"]).Count(); i != 0 {
-		err = gerror.New("手机号已经存在")
-		return
-	}
-	//保存管理员信息
-	data["create_time"] = gtime.Timestamp()
 	//密码加密
 	data["user_password"] = utils.EncryptCBC(gconv.String(data["user_password"]), utils.AdminCbcPublicKey)
-	res, err := user.Model.Filter().Data(data).Save()
-	if err != nil {
-		return
-	}
-	InsertId, _ = res.LastInsertId()
-	return
+	return user.Add(data)
 }
 
 //修改用户信息
 func EditUser(data map[string]interface{}) (err error) {
-	e := checkUserData(data, "edit")
-	if e != nil {
-		err = gerror.New(e.(*gvalid.Error).FirstString())
-		return
-	}
-	if i, _ := user.Model.Where("id!=? and user_name=?", data["id"], data["user_name"]).Count(); i != 0 {
-		err = gerror.New("用户名已经存在")
-		return
-	}
-	if i, _ := user.Model.Where("id!=? and mobile=?", data["mobile"]).Count(); i != 0 {
-		err = gerror.New("手机号已经存在")
-		return
-	}
-	//保存管理员信息
 	//提交了密码?密码加密
 	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")
 	}
-	_, err = user.Model.Filter().Data(data).Save()
-	if err != nil {
-		return
-	}
-	return
+	return user.Edit(data)
 }
 
 //添加用户角色信息
@@ -358,85 +194,11 @@ func EditUserRole(roleIds interface{}, userId int) (err error) {
 	return
 }
 
-//验证用户表单数据
-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
-}
-
 func DeleteRoleByIds(ids []int) (err error) {
-	//查询所有子级id
-	roleAllEntity, err := GetRoleList()
-	if err != nil {
-		g.Log().Debug(err)
-		err = gerror.New("删除失败,不存在角色信息")
-		return
-	}
-	roleAll := gconv.SliceMap(roleAllEntity)
-	sonList := make(g.List, 0, len(roleAll))
-	for _, id := range ids {
-		sonList = append(sonList, utils.FindSonByParentId(roleAll, id, "parent_id", "id")...)
-	}
-	for _, role := range sonList {
-		ids = append(ids, gconv.Int(role["id"]))
-	}
-	tx, err := g.DB("default").Begin() //开启事务
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("事务处理失败")
-		return
-	}
-	_, err = tx.Table(role.Table).Where("id in(?)", ids).Delete()
-	if err != nil {
-		g.Log().Error(err)
-		tx.Rollback()
-		err = gerror.New("删除失败")
-		return
-	}
-	//删除角色的权限
-	for _, v := range ids {
-		err = DeleteRoleRule(v)
-		if err != nil {
-			g.Log().Error(err)
-			tx.Rollback()
-			err = gerror.New("删除失败")
-			return
-		}
-	}
-	tx.Commit()
-	return
+	return role.DeleteByIds(ids)
 }
 
 //删除菜单
 func DeleteMenuByIds(ids []int) (err error) {
-	//获取菜单数据
-	menus, err := GetMenuList()
-	if err != nil {
-		return
-	}
-	menuList := gconv.SliceMap(menus)
-	son := make(g.List, 0, len(menuList))
-	for _, id := range ids {
-		son = append(son, utils.FindSonByParentId(menuList, id, "pid", "id")...)
-	}
-	for _, v := range son {
-		ids = append(ids, gconv.Int(v["id"]))
-	}
-	_, err = auth_rule.Model.Where("id in (?)", ids).Delete()
-	return
+	return auth_rule.DeleteByIds(ids)
 }

+ 6 - 111
app/service/admin/cms_service/menu.go

@@ -2,139 +2,34 @@ package cms_service
 
 import (
 	"gfast/app/model/admin/cms_category"
-	"gfast/app/service/cache_service"
-	"github.com/gogf/gf/errors/gerror"
-	"github.com/gogf/gf/frame/g"
-	"github.com/gogf/gf/text/gstr"
-	"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
+	return cms_category.GetListChannel()
 }
 
 //获取所有菜单列表
 func GetMenuList() (list []*cms_category.Entity, err error) {
-	cache := cache_service.New()
-	//从缓存获取数据
-	iList := cache.Get(cache_service.AdminCmsMenu)
-	if iList != nil {
-		list = iList.([]*cms_category.Entity)
-		return
-	}
-	list, err = cms_category.Model.Order("list_order ASC,id ASC").All()
-	if err != nil {
-		g.Log().Error()
-		err = gerror.New("获取菜单数据失败")
-	}
-	//缓存数据
-	cache.Set(cache_service.AdminCmsMenu, list, 0, cache_service.AdminCmsTag)
-	return
+	return cms_category.GetList()
 }
 
 //保存栏目操作
 func AddSave(req *cms_category.ReqAdd) (id int64, err error) {
-	var entity cms_category.Entity
-	entity.ParentId = req.ParentId
-	entity.CateType = req.CateType
-	entity.Status = req.Status
-	entity.Name = req.Name
-	entity.Description = req.Description
-	entity.SeoTitle = req.InputSeoTitle
-	entity.SeoKeywords = req.InputSeoKeywords
-	entity.SeoDescription = req.InputSeoDescription
-	entity.CateAddress = req.CateAddress
-	entity.CateContent = req.CateContent
-	res, err := entity.Insert()
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("保存失败")
-		return
-	}
-	id, err = res.LastInsertId()
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("保存失败")
-		return
-	}
-	return
+	return cms_category.AddSave(req)
 }
 
 //修改栏目操作
 func EditSave(req *cms_category.ReqEdit) (id int64, err error) {
-	entity, err := GetMenuInfoById(req.Id)
-	if err != nil {
-		return
-	}
-	if entity == nil {
-		err = gerror.New("栏目信息不存在")
-		return
-	}
-	entity.Id = gconv.Uint64(req.Id)
-	entity.ParentId = req.ParentId
-	entity.CateType = req.CateType
-	entity.Status = req.Status
-	entity.Name = req.Name
-	entity.Description = req.Description
-	entity.SeoTitle = req.InputSeoTitle
-	entity.SeoKeywords = req.InputSeoKeywords
-	entity.SeoDescription = req.InputSeoDescription
-	entity.CateAddress = req.CateAddress
-	entity.CateContent = req.CateContent
-	res, err := entity.Update()
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("修改保存失败")
-		return
-	}
-	id, err = res.RowsAffected()
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("修改保存失败")
-		return
-	}
-	return
+	return cms_category.EditSave(req)
 }
 
 //获取搜索栏目结果
 func GetMenuListSearch(req *cms_category.ReqSearchList) (menus []*cms_category.Entity, err error) {
-	menus, err = GetMenuList()
-	if req != nil {
-		searchMenus := make([]*cms_category.Entity, 0, len(menus))
-		if req.Name != "" {
-			for _, entity := range menus {
-				if gstr.Contains(entity.Name, req.Name) {
-					searchMenus = append(searchMenus, entity)
-				}
-			}
-		}
-		menus = searchMenus
-	}
-	return
+	return cms_category.GetListSearch(req)
 }
 
 //根据栏目ID获取栏目信息
 func GetMenuInfoById(id int) (menu *cms_category.Entity, err error) {
-	menus, err := GetMenuList()
-	if err != nil {
-		return
-	}
-	for _, entity := range menus {
-		if entity.Id == gconv.Uint64(id) {
-			menu = entity
-			break
-		}
-	}
-	return
+	return cms_category.GetInfoById(id)
 }

+ 5 - 112
app/service/admin/dict_service/dict_data.go

@@ -2,136 +2,29 @@ package dict_service
 
 import (
 	"gfast/app/model/admin/sys_dict_data"
-	"gfast/app/model/admin/sys_dict_type"
-	"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"
 )
 
 //添加字典数据操作
 func AddSaveData(req *sys_dict_data.AddDataReq, userId int) (int64, error) {
-	var entity sys_dict_data.Entity
-	entity.DictType = req.DictType
-	entity.Status = req.Status
-	entity.DictLabel = req.DictLabel
-	entity.CssClass = req.CssClass
-	entity.DictSort = req.DictSort
-	entity.DictValue = req.DictValue
-	entity.IsDefault = req.IsDefault
-	entity.ListClass = req.ListClass
-	entity.Remark = req.Remark
-	entity.CreateTime = gconv.Uint64(gtime.Timestamp())
-	entity.CreateBy = userId
-	result, err := entity.Insert()
-	if err != nil {
-		g.Log().Error(err)
-		return 0, gerror.New("添加失败")
-	}
-	id, err := result.LastInsertId()
-	if err != nil {
-		g.Log().Error(err)
-		return 0, gerror.New("添加失败")
-	}
-	return id, nil
+	return sys_dict_data.AddSaveData(req, userId)
 }
 
 //修改字典数据操作
 func EditSaveData(req *sys_dict_data.EditDataReq, userId int) (int64, error) {
-	entity, err := GetDictDataById(req.DictCode)
-	if err != nil {
-		return 0, err
-	}
-	entity.DictType = req.DictType
-	entity.Status = req.Status
-	entity.DictLabel = req.DictLabel
-	entity.CssClass = req.CssClass
-	entity.DictSort = req.DictSort
-	entity.DictValue = req.DictValue
-	entity.IsDefault = req.IsDefault
-	entity.ListClass = req.ListClass
-	entity.Remark = req.Remark
-	entity.UpdateTime = gconv.Uint64(gtime.Timestamp())
-	entity.UpdateBy = userId
-	result, err := entity.Update()
-	if err != nil {
-		g.Log().Error(err)
-		return 0, gerror.New("修改失败")
-	}
-	return result.RowsAffected()
+	return sys_dict_data.EditSaveData(req, userId)
 }
 
 //通过字典数据主键获取数据
 func GetDictDataById(dictCode int) (*sys_dict_data.Entity, error) {
-	entity, err := sys_dict_data.Model.FindOne("dict_code", dictCode)
-	if err != nil {
-		g.Log().Error(err)
-		return nil, gerror.New("获取字典数据失败")
-	}
-	if entity == nil {
-		return nil, gerror.New("获取字典数据失败")
-	}
-	return entity, nil
+	return sys_dict_data.GetById(dictCode)
 }
 
 //字典数据列表查询分页
 func SelectDataListByPage(req *sys_dict_data.SelectDataPageReq) (total, page int, list []*sys_dict_data.Entity, err error) {
-	model := sys_dict_data.Model
-	if req != nil {
-		if req.DictLabel != "" {
-			model = model.Where("dict_label like ?", "%"+req.DictLabel+"%")
-		}
-		if req.Status != "" {
-			model = model.Where("status = ", gconv.Int(req.Status))
-		}
-		if req.DictType != "" {
-			model = model.Where("dict_type = ?", req.DictType)
-		}
-		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 = utils.AdminPageNum
-	}
-	list, err = model.Page(page, req.PageSize).Order("dict_sort asc,dict_code asc").All()
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("获取数据失败")
-		return
-	}
-	return
-}
-
-//删除字典
-func DeleteDictByIds(ids []int) error {
-	discs, err := sys_dict_type.Model.Where("dict_id in(?)", ids).All()
-	if err != nil {
-		g.Log().Error(err)
-		return gerror.New("没有要删除的数据")
-	}
-	//删除字典下的数据
-	for _, v := range discs {
-		sys_dict_data.Model.Delete("dict_type=?", v.DictType)
-		v.Delete()
-	}
-	return nil
+	return sys_dict_data.SelectDataListByPage(req)
 }
 
 //删除字典数据
 func DeleteDictDataByIds(ids []int) error {
-	_, err := sys_dict_data.Model.Delete("dict_code in (?)", ids)
-	if err != nil {
-		g.Log().Error(err)
-		return gerror.New("删除失败")
-	}
-	return nil
+	return sys_dict_data.DeleteByIds(ids)
 }

+ 12 - 152
app/service/admin/dict_service/dict_type.go

@@ -1,186 +1,46 @@
 package dict_service
 
 import (
-	"gfast/app/model/admin/sys_dict_data"
 	"gfast/app/model/admin/sys_dict_type"
-	"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/text/gstr"
-	"github.com/gogf/gf/util/gconv"
 )
 
 //检查字典类型是否唯一
 func CheckDictTypeUniqueAll(dictType string) bool {
-	dict, err := sys_dict_type.Model.FindOne("dict_type=?", dictType)
-	if err != nil {
-		g.Log().Error(err)
-		return false
-	}
-	if dict != nil {
-		return false
-	}
-	return true
+	return sys_dict_type.CheckDictTypeUniqueAll(dictType)
 }
 
 //根据主键判断是否唯一
 func CheckDictTypeUnique(dictType *sys_dict_type.EditReq) bool {
-	dict, err := sys_dict_type.Model.FindOne("dict_type=? and dict_id!=?", dictType.DictType, dictType.DictId)
-	if err != nil {
-		g.Log().Error(err)
-		return false
-	}
-	if dict != nil {
-		return false
-	}
-	return true
+	return sys_dict_type.CheckDictTypeUnique(dictType)
 }
 
 //添加数据
 func AddSave(req *sys_dict_type.AddReq, userId int) (int64, error) {
-	var entity sys_dict_type.Entity
-	entity.Status = req.Status
-	entity.DictType = req.DictType
-	entity.DictName = req.DictName
-	entity.Remark = req.Remark
-	entity.CreateTime = gconv.Uint64(gtime.Timestamp())
-	entity.CreateBy = gconv.Uint(userId)
-
-	result, err := entity.Insert()
-	if err != nil {
-		return 0, err
-	}
-	id, err := result.LastInsertId()
-	if err != nil || id <= 0 {
-		return 0, err
-	}
-	return id, nil
+	return sys_dict_type.AddSave(req, userId)
 }
 
 //修改保存字典类型
 func EditSave(req *sys_dict_type.EditReq, userId int) (int64, error) {
-	entity, err := GetDictById(gconv.Int(req.DictId))
-	if err != nil || entity == nil {
-		return 0, err
-	}
-	entity.DictType = req.DictType
-	entity.DictName = req.DictName
-	entity.Status = req.Status
-	entity.Remark = req.Remark
-	entity.UpdateBy = gconv.Uint(userId)
-	entity.UpdateTime = gconv.Uint64(gtime.Timestamp())
-	res, err := entity.Update()
-	if err != nil {
-		g.Log().Error(err)
-		return 0, gerror.New("更新失败")
-	}
-	return res.RowsAffected()
+	return sys_dict_type.EditSave(req, userId)
 }
 
 //字典列表查询分页
 func SelectListByPage(req *sys_dict_type.SelectPageReq) (total, page int, list []*sys_dict_type.Entity, err error) {
-	model := sys_dict_type.Model
-	if req != nil {
-		if req.DictName != "" {
-			model = model.Where("dict_name like ?", "%"+req.DictName+"%")
-		}
-
-		if req.DictType != "" {
-			model = model.Where("dict_type like ?", "%"+req.DictType+"%")
-		}
-
-		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 = utils.AdminPageNum
-	}
-	list, err = model.Page(page, req.PageSize).Order("dict_id asc").All()
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("获取数据失败")
-		return
-	}
-	return
+	return sys_dict_type.SelectListByPage(req)
 }
 
 //通过id获取字典数据
 func GetDictById(id int) (dict *sys_dict_type.Entity, err error) {
-	dict, err = sys_dict_type.Model.FindOne("dict_id=?", id)
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("获取字典数据失败")
-		return
-	}
-	if dict == nil {
-		err = gerror.New("获取字典数据失败")
-		return
-	}
-	return
+	return sys_dict_type.GetDictById(id)
 }
 
 //通过字典键类型获取选项
 func GetDictWithDataByType(dictType, defaultValue, emptyLabel string) (dict g.Map, err error) {
-	dictEntity, err := sys_dict_type.Model.FindOne("dict_type", dictType)
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("获取字典选项失败")
-		return
-	}
-	var dictDataEntities []*sys_dict_data.Entity
-	if dictEntity != nil {
-		//获取字典数据
-		dictDataEntities, err = sys_dict_data.Model.Where("dict_type", dictType).
-			Order("dict_sort ASC,dict_code ASC").All()
-		if err != nil {
-			g.Log().Error(err)
-			err = gerror.New("获取字典选项失败")
-			return
-		}
-		values := make(g.List, len(dictDataEntities))
-		for k, v := range dictDataEntities {
-			isDefault := 0
-			if defaultValue != "" {
-				if gstr.Equal(defaultValue, v.DictValue) {
-					isDefault = 1
-				}
-			} else if emptyLabel == "" {
-				isDefault = v.IsDefault
-			}
-			values[k] = g.Map{
-				"key":       v.DictValue,
-				"value":     v.DictLabel,
-				"isDefault": isDefault,
-			}
-		}
-		if emptyLabel != "" {
-			values = append(g.List{g.Map{"isDefault": 0, "key": "", "value": emptyLabel}}, values...)
-		}
-		dict = g.Map{
-			"dict_name": dictEntity.DictName,
-			"remark":    dictEntity.Remark,
-			"values":    values,
-		}
-	}
-	return
+	return sys_dict_type.GetDictWithDataByType(dictType, defaultValue, emptyLabel)
+}
+
+//删除字典
+func DeleteDictByIds(ids []int) error {
+	return sys_dict_type.DeleteDictByIds(ids)
 }

+ 8 - 150
app/service/admin/monitor_service/job.go

@@ -2,19 +2,12 @@ package monitor_service
 
 import (
 	"gfast/app/model/admin/sys_job"
-	"gfast/app/task"
-	"gfast/library/utils"
-	"github.com/gogf/gf/errors/gerror"
 	"github.com/gogf/gf/frame/g"
-	"github.com/gogf/gf/os/gcron"
-	"github.com/gogf/gf/os/gtime"
-	"github.com/gogf/gf/util/gconv"
-	"strings"
 )
 
 func init() {
 	//自动执行已开启的任务
-	jobs, err := sys_job.Model.Where("status", 0).All()
+	jobs, err := sys_job.GetJobs()
 	if err != nil {
 		g.Log().Error(err)
 	}
@@ -25,170 +18,35 @@ func init() {
 
 //添加计划任务
 func AddJob(req *sys_job.ReqAdd, userId int) (id int64, err error) {
-	entity := new(sys_job.Entity)
-	entity.JobName = req.JobName
-	entity.JobGroup = req.JobGroup
-	entity.InvokeTarget = req.InvokeTarget
-	entity.JobParams = req.JobParams
-	entity.CronExpression = req.CronExpression
-	entity.MisfirePolicy = req.MisfirePolicy
-	entity.Remark = req.Remark
-	entity.Status = req.Status
-	entity.CreateTime = gconv.Uint64(gtime.Timestamp())
-	entity.CreateBy = gconv.Uint64(userId)
-	res, err := entity.Save()
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("添加任务失败")
-	}
-	id, err = res.LastInsertId()
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("添加任务失败")
-	}
-	return
+	return sys_job.Add(req, userId)
 }
 
 //修改计划任务
 func EditJob(req *sys_job.ReqEdit, userId int) (rows int64, err error) {
-	entity, err := GetJobInfoById(req.JobId)
-	if err != nil {
-		return
-	}
-	entity.JobName = req.JobName
-	entity.JobGroup = req.JobGroup
-	entity.InvokeTarget = req.InvokeTarget
-	entity.JobParams = req.JobParams
-	entity.CronExpression = req.CronExpression
-	entity.MisfirePolicy = req.MisfirePolicy
-	entity.Remark = req.Remark
-	entity.Status = req.Status
-	entity.UpdateTime = gconv.Uint64(gtime.Timestamp())
-	entity.UpdateBy = gconv.Uint64(userId)
-	res, err := entity.Update()
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("修改任务失败")
-	}
-	rows, err = res.RowsAffected()
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("修改任务失败")
-	}
-	return
+	return sys_job.Edit(req, userId)
 }
 
 //任务列表
 func JobListByPage(req *sys_job.SelectPageReq) (total, page int, list []*sys_job.Entity, err error) {
-	model := sys_job.Model
-	if req != nil {
-		if req.Status != "" {
-			model = model.Where("status", gconv.Int(req.Status))
-		}
-		if req.JobGroup != "" {
-			model = model.Where("job_group", req.JobGroup)
-		}
-		if req.JobName != "" {
-			model = model.Where("job_name like ?", "%"+req.JobName+"%")
-		}
-	}
-	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 = utils.AdminPageNum
-	}
-	list, err = model.Page(page, req.PageSize).Order("job_id asc").All()
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("获取数据失败")
-		return
-	}
-	return
+	return sys_job.JobListByPage(req)
 }
 
 //通过id获取任务信息
 func GetJobInfoById(id int64) (job *sys_job.Entity, err error) {
-	if id == 0 {
-		err = gerror.New("参数错误")
-		return
-	}
-	job, err = sys_job.Model.FindOne("job_id", id)
-	if err != nil {
-		g.Log().Error(err)
-	}
-	if job == nil || err != nil {
-		err = gerror.New("获取任务信息失败")
-		return
-	}
-	return
+	return sys_job.GetJobInfoById(id)
 }
 
 //批量删除计划任务
 func DeleteJobByIds(ids []int) (err error) {
-	if len(ids) == 0 {
-		err = gerror.New("参数错误")
-	}
-	_, err = sys_job.Model.Delete("job_id in (?)", ids)
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("删除失败")
-	}
-	return
+	return sys_job.DeleteJobByIds(ids)
 }
 
 //启动任务
 func JobStart(job *sys_job.Entity) error {
-	//可以task目录下是否绑定对应的方法
-	f := task.GetByName(job.InvokeTarget)
-	if f == nil {
-		return gerror.New("当前task目录下没有绑定这个方法")
-	}
-	//传参
-	paramArr := strings.Split(job.JobParams, "|")
-	g.Log().Debug(paramArr)
-	task.EditParams(f.FuncName, paramArr)
-	rs := gcron.Search(job.InvokeTarget)
-	if rs == nil {
-		if job.MisfirePolicy == 1 {
-			task, err := gcron.Add(job.CronExpression, f.Run, job.InvokeTarget)
-			if err != nil || task == nil {
-				return err
-			}
-		} else {
-			task, err := gcron.AddOnce(job.CronExpression, f.Run, job.InvokeTarget)
-			if err != nil || task == nil {
-				return err
-			}
-		}
-	}
-	gcron.Start(job.InvokeTarget)
-	if job.MisfirePolicy == 1 {
-		job.Status = 0
-		job.Update()
-	}
-	return nil
+	return sys_job.JobStart(job)
 }
 
 //停止任务
 func JobStop(job *sys_job.Entity) error {
-	//可以task目录下是否绑定对应的方法
-	f := task.GetByName(job.InvokeTarget)
-	if f == nil {
-		return gerror.New("当前task目录下没有绑定这个方法")
-	}
-	rs := gcron.Search(job.InvokeTarget)
-	if rs != nil {
-		gcron.Stop(job.InvokeTarget)
-	}
-	job.Status = 1
-	job.Update()
-	return nil
+	return sys_job.JobStop(job)
 }

+ 5 - 61
app/service/admin/monitor_service/login_log.go

@@ -2,81 +2,25 @@ package monitor_service
 
 import (
 	"gfast/app/model/admin/sys_login_log"
-	"gfast/library/utils"
-	"github.com/gogf/gf/errors/gerror"
-	"github.com/gogf/gf/frame/g"
-	"github.com/gogf/gf/util/gconv"
+	"gfast/library/service"
 )
 
 func LoginLogListByPage(req *sys_login_log.SelectPageReq) (total, page int, list []*sys_login_log.Entity, err error) {
-	model := sys_login_log.Model
-	order := "login_time DESC"
-	if req != nil {
-		if req.LoginName != "" {
-			model = model.Where("login_name like ?", "%"+req.LoginName+"%")
-		}
-		if req.Status != "" {
-			model = model.Where("status", gconv.Int(req.Status))
-		}
-		if req.Ipaddr != "" {
-			model = model.Where("ipaddr like ?", "%"+req.Ipaddr+"%")
-		}
-		if req.BeginTime != "" {
-			model = model.Where("login_time >=", utils.StrToTimestamp(req.BeginTime))
-		}
-		if req.EndTime != "" {
-			model = model.Where("login_time <=", utils.StrToTimestamp(req.EndTime))
-		}
-		if req.SortName != "" {
-			if req.SortOrder != "" {
-				order = req.SortName + " " + req.SortOrder
-			} else {
-				order = req.SortName + " DESC"
-			}
-		}
-	}
-	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 = utils.AdminPageNum
-	}
-	list, err = model.Page(page, req.PageSize).Order(order).All()
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("获取数据失败")
-		return
+		req.PageSize = service.AdminPageNum
 	}
-	return
+	return sys_login_log.LoginLogListByPage(req)
 }
 
 //删除登录日志
 func DeleteLoginLogByIds(ids []int) (err error) {
-	if len(ids) == 0 {
-		err = gerror.New("参数错误")
-		return
-	}
-	_, err = sys_login_log.Model.Delete("info_id in (?)", ids)
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("删除失败")
-	}
-	return
+	return sys_login_log.DeleteLoginLogByIds(ids)
 }
 
 //清空日志
 func ClearLoginLog() (err error) {
-	_, err = g.DB().Exec("truncate " + sys_login_log.Table)
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("清除失败")
-	}
-	return
+	return sys_login_log.ClearLoginLog()
 }

+ 4 - 26
app/service/admin/monitor_service/online.go

@@ -3,7 +3,7 @@ package monitor_service
 import (
 	"gfast/app/model/admin/user_online"
 	"gfast/boot"
-	"gfast/library/utils"
+	"gfast/library/service"
 	"github.com/goflyfox/gtoken/gtoken"
 	"github.com/gogf/gf/encoding/gjson"
 	"github.com/gogf/gf/errors/gerror"
@@ -14,35 +14,13 @@ import (
 
 //获取在线用户列表
 func GetOnlineListPage(req *user_online.ReqListSearch) (total, page int, list []*user_online.Entity, err error) {
-	model := user_online.Model
-	if req != nil {
-		if req.Ip != "" {
-			model = model.Where("ip like ?", "%"+req.Ip+"%")
-		}
-		if req.Username != "" {
-			model = model.Where("user_name like ?", "%"+req.Username+"%")
-		}
-	}
-	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 = utils.AdminPageNum
-	}
-	list, err = model.FieldsEx("token").Page(page, req.PageSize).Order("create_time DESC").All()
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("获取数据失败")
-		return
+		req.PageSize = service.AdminPageNum
 	}
-	return
+	return user_online.GetOnlineListPage(req)
 }
 
 //通过token获取登录用户数据
@@ -93,7 +71,7 @@ func GetUuidUserKeyByToken(token string) (uuid, userKey string) {
 //强制退出操作
 func ForceLogout(ids []int) error {
 	for _, id := range ids {
-		entity, err := user_online.Model.FindOne("id", id)
+		entity, err := user_online.GetInfoById(id)
 		if err != nil {
 			g.Log().Error(err)
 			return gerror.New("获取在线用户信息失败")

+ 7 - 118
app/service/admin/params_service/params.go

@@ -2,150 +2,39 @@ package params_service
 
 import (
 	"gfast/app/model/admin/sys_config"
-	"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"
 )
 
 //保存参数
 func AddSave(req *sys_config.AddReq, userId int) (id int64, err error) {
-	var entity sys_config.Entity
-	entity.ConfigName = req.ConfigName
-	entity.ConfigKey = req.ConfigKey
-	entity.ConfigType = req.ConfigType
-	entity.ConfigValue = req.ConfigValue
-	entity.Remark = req.Remark
-	entity.CreateTime = gconv.Uint64(gtime.Timestamp())
-	entity.CreateBy = gconv.Uint(userId)
-	result, err := entity.Insert()
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("保存失败")
-	}
-	id, err = result.LastInsertId()
-	if err != nil {
-		g.Log().Error()
-		err = gerror.New("获取插入的主键ID失败")
-	}
-	return
+	return sys_config.AddSave(req, userId)
 }
 
 //修改保存
 func EditSave(req *sys_config.EditReq, userId int) (int64, error) {
-	entity, err := GetParamsById(gconv.Int(req.ConfigId))
-	if err != nil {
-		return 0, err
-	}
-	entity.ConfigName = req.ConfigName
-	entity.ConfigKey = req.ConfigKey
-	entity.ConfigType = req.ConfigType
-	entity.ConfigValue = req.ConfigValue
-	entity.Remark = req.Remark
-	entity.UpdateTime = gconv.Uint64(gtime.Timestamp())
-	entity.UpdateBy = gconv.Uint(userId)
-	result, err := entity.Update()
-	if err != nil {
-		g.Log().Error(err)
-		return 0, gerror.New("修改失败")
-	}
-	rows, err := result.RowsAffected()
-	if err != nil {
-		g.Log().Error(err)
-		return 0, gerror.New("修改失败")
-	}
-	return rows, nil
+	return sys_config.EditSave(req, userId)
 }
 
 //验证参数键名是否存在
 func CheckConfigKeyUniqueAll(configKey string) error {
-	entity, err := sys_config.Model.FindOne("config_key", configKey)
-	if err != nil {
-		g.Log().Error(err)
-		return gerror.New("校验数据失败")
-	}
-	if entity != nil {
-		return gerror.New("参数键名已经存在")
-	}
-	return nil
+	return sys_config.CheckConfigKeyUniqueAll(configKey)
 }
 
 //列表分页搜索查询
 func SelectListByPage(req *sys_config.SelectPageReq) (total, page int, list []*sys_config.Entity, err error) {
-	model := sys_config.Model
-	if req != nil {
-		if req.ConfigName != "" {
-			model = model.Where("config_name like ?", "%"+req.ConfigName+"%")
-		}
-		if req.ConfigType != "" {
-			model.Where("status = ", gconv.Int(req.ConfigType))
-		}
-		if req.ConfigKey != "" {
-			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))
-		}
-	}
-	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 = utils.AdminPageNum
-	}
-	list, err = model.Page(page, req.PageSize).Order("config_id asc").All()
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("获取数据失败")
-		return
-	}
-	return
+	return sys_config.SelectListByPage(req)
 }
 
 //通过id查询参数数据
 func GetParamsById(id int) (entity *sys_config.Entity, err error) {
-	entity, err = sys_config.Model.FindOne("config_id", id)
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("查询参数数据出错")
-	}
-	if entity == nil {
-		err = gerror.New("未查询到参数数据")
-	}
-	return
+	return sys_config.GetParamsById(id)
 }
 
 //检查键是否已经存在
 func CheckConfigKeyUnique(configKey string, configId int64) error {
-	entity, err := sys_config.Model.FindOne("config_key=? and config_id!=?", configKey, configId)
-	if err != nil {
-		g.Log().Error(err)
-		return gerror.New("校验数据失败")
-	}
-	if entity != nil {
-		return gerror.New("参数键名已经存在")
-	}
-	return nil
+	return sys_config.CheckConfigKeyUnique(configKey, configId)
 }
 
 //删除参数
 func DeleteByIds(ids []int) error {
-	_, err := sys_config.Model.Delete("config_id in (?)", ids)
-	if err != nil {
-		g.Log().Error(err)
-		return gerror.New("删除失败")
-	}
-	return nil
+	return sys_config.DeleteByIds(ids)
 }

+ 2 - 26
app/service/admin/user_service/user.go

@@ -7,6 +7,7 @@ import (
 	"gfast/app/service/admin/auth_service"
 	"gfast/app/service/casbin_adapter_service"
 	"gfast/boot"
+	"gfast/library/service"
 	"gfast/library/utils"
 	"github.com/gogf/gf/frame/g"
 	"github.com/gogf/gf/net/ghttp"
@@ -32,18 +33,7 @@ func GetLoginAdminInfo(r *ghttp.Request) (userInfo *user.Entity) {
 
 //获取管理员列表
 func GetAdminList(where g.Map, page int) (total int, userList []*user.Entity, err error) {
-	userModel := user.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)
-		}
-	}
-	total, err = userModel.Count()
-	userList, err = userModel.ForPage(page, utils.AdminPageNum).OrderBy("id asc").All()
-	return
+	return user.GetAdminList(where, page, service.AdminPageNum)
 }
 
 //获取管理员的角色信息
@@ -82,20 +72,6 @@ func GetAdminRoleIds(userId int) (roleIds []int, err error) {
 	return
 }
 
-//根据用户id获取用户信息
-func GetAdminInfoById(id int64) (userMap g.Map) {
-	//获取用户角色信息
-	if id != 0 {
-		userInfo, err := user.Model.Where("id=?", id).One()
-		if err != nil {
-			g.Log().Error(err)
-			return
-		}
-		userMap = gconv.Map(userInfo)
-	}
-	return
-}
-
 //获取菜单
 func GetAllMenus() (menus g.List, err error) {
 	//获取所有开启的菜单

+ 9 - 9
boot/boot.go

@@ -1,7 +1,7 @@
 package boot
 
 import (
-	"gfast/library/utils"
+	"gfast/library/service"
 	"github.com/goflyfox/gtoken/gtoken"
 	"github.com/gogf/gf/frame/g"
 	"github.com/gogf/gf/os/glog"
@@ -20,16 +20,16 @@ func init() {
 
 func initAdmin() {
 	//无需验证权限的用户id
-	utils.NotCheckAuthAdminIds = g.Cfg().GetInts("adminInfo.notCheckAuthAdminIds")
+	service.NotCheckAuthAdminIds = g.Cfg().GetInts("adminInfo.notCheckAuthAdminIds")
 	//后端分页长度配置
-	utils.AdminPageNum = g.Cfg().GetInt("adminInfo.pageNum")
+	service.AdminPageNum = g.Cfg().GetInt("adminInfo.pageNum")
 	// 设置并启动后台gtoken处理
 	initAdminGfToken()
 }
 
 func initAdminGfToken() {
 	//多端登陆配置
-	utils.AdminMultiLogin = g.Cfg().GetBool("gToken.MultiLogin")
+	service.AdminMultiLogin = g.Cfg().GetBool("gToken.MultiLogin")
 	AdminGfToken = &gtoken.GfToken{
 		CacheMode:        g.Cfg().GetInt8("gToken.CacheMode"),
 		CacheKey:         g.Cfg().GetString("gToken.CacheKey"),
@@ -38,14 +38,14 @@ func initAdminGfToken() {
 		TokenDelimiter:   g.Cfg().GetString("gToken.TokenDelimiter"),
 		EncryptKey:       g.Cfg().GetBytes("gToken.EncryptKey"),
 		AuthFailMsg:      g.Cfg().GetString("gToken.AuthFailMsg"),
-		MultiLogin:       utils.AdminMultiLogin,
+		MultiLogin:       service.AdminMultiLogin,
 		LoginPath:        "/sysLogin/login",
-		LoginBeforeFunc:  utils.AdminLogin,
-		LoginAfterFunc:   utils.AdminLoginAfter,
+		LoginBeforeFunc:  service.AdminLogin,
+		LoginAfterFunc:   service.AdminLoginAfter,
 		LogoutPath:       "/sysLogin/logout",
 		AuthPaths:        g.SliceStr{"/system/*"},
-		AuthAfterFunc:    utils.AuthAfterFunc,
-		LogoutBeforeFunc: utils.AdminLoginOut,
+		AuthAfterFunc:    service.AuthAfterFunc,
+		LogoutBeforeFunc: service.AdminLoginOut,
 	}
 	AdminGfToken.Start()
 }

+ 1 - 1
go.mod

@@ -4,7 +4,7 @@ require (
 	github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect
 	github.com/casbin/casbin/v2 v2.1.2
 	github.com/go-ole/go-ole v1.2.4 // indirect
-	github.com/goflyfox/gtoken v1.3.11
+	github.com/goflyfox/gtoken v1.3.12
 	github.com/gogf/gf v1.11.5
 	github.com/mojocn/base64Captcha v1.3.0
 	github.com/mssola/user_agent v0.5.1

+ 2 - 0
go.sum

@@ -22,6 +22,8 @@ github.com/goflyfox/gtoken v1.3.9 h1:9WSFlk0R9Fy8vmbjKqR33Yqfsce9TYfn2lMwZ9zVOPU
 github.com/goflyfox/gtoken v1.3.9/go.mod h1:AdsIiP+9xYazR69j4dN1nLYdBoC+Xh3UVUYjqOM8OJs=
 github.com/goflyfox/gtoken v1.3.11 h1:dttowT4XrxtDrmpNYCtF23mtpNW2keNR/Me5ULPsQjw=
 github.com/goflyfox/gtoken v1.3.11/go.mod h1:2oUK27DG/F+jVPCGtEWsKL5aM4zmCIg9/VREkGhIrw0=
+github.com/goflyfox/gtoken v1.3.12 h1:ewet3ZzkfBIuOKkJ2T9uErheDAu/TxnyrmMmEaof2F8=
+github.com/goflyfox/gtoken v1.3.12/go.mod h1:KPGDYrhvNzcfqFJz4/rE6x0SyURAuAxfRNhwMxGbFxk=
 github.com/gogf/gf v1.10.1 h1:mu1VWviGm8ucgFNODQnw8ourgvgNBBovbLFbot/70BY=
 github.com/gogf/gf v1.10.1/go.mod h1:/37gncPmuM06D4YSqiDze9GsasDtF2QnWkUfKeiGW/Q=
 github.com/gogf/gf v1.11.2/go.mod h1:/37gncPmuM06D4YSqiDze9GsasDtF2QnWkUfKeiGW/Q=

+ 4 - 34
library/utils/function.go → library/service/service.go

@@ -1,4 +1,4 @@
-package utils
+package service
 
 import (
 	"database/sql"
@@ -7,10 +7,9 @@ import (
 	"gfast/app/model/admin/user"
 	"gfast/app/model/admin/user_online"
 	"gfast/library/response"
+	"gfast/library/utils"
 	"github.com/goflyfox/gtoken/gtoken"
-	"github.com/gogf/gf/crypto/gaes"
 	"github.com/gogf/gf/crypto/gmd5"
-	"github.com/gogf/gf/encoding/gbase64"
 	"github.com/gogf/gf/frame/g"
 	"github.com/gogf/gf/net/ghttp"
 	"github.com/gogf/gf/os/gtime"
@@ -21,8 +20,6 @@ import (
 	"strings"
 )
 
-const AdminCbcPublicKey = "HqmP1KLMuz09Q0Bu"
-
 var (
 	AdminMultiLogin      bool  //是否允许后台管理员多端登陆
 	AdminPageNum         = 20  //后台分页长度
@@ -89,7 +86,7 @@ func AdminLogin(r *ghttp.Request) (string, interface{}) {
 	/*if !VerifyString(data["idKeyC"], data["idValueC"]) {
 		response.JsonExit(r, response.ErrorCode, "验证码输入错误")
 	}*/
-	password := EncryptCBC(data["password"], AdminCbcPublicKey)
+	password := utils.EncryptCBC(data["password"], utils.AdminCbcPublicKey)
 	var keys string
 	if AdminMultiLogin {
 		keys = data["username"] + password + gmd5.MustEncryptString(r.GetClientIp())
@@ -172,33 +169,6 @@ func AdminLoginOut(r *ghttp.Request) bool {
 	return true
 }
 
-//字符串加密
-func EncryptCBC(plainText, publicKey string) string {
-	key := []byte(publicKey)
-	b, e := gaes.EncryptCBC([]byte(plainText), key, key)
-	if e != nil {
-		g.Log().Error(e.Error())
-		return ""
-	}
-	return gbase64.EncodeToString(b)
-}
-
-//字符串解密
-func DecryptCBC(plainText, publicKey string) string {
-	key := []byte(publicKey)
-	plainTextByte, e := gbase64.DecodeString(plainText)
-	if e != nil {
-		g.Log().Error(e.Error())
-		return ""
-	}
-	b, e := gaes.DecryptCBC(plainTextByte, key, key)
-	if e != nil {
-		g.Log().Error(e.Error())
-		return ""
-	}
-	return gbase64.EncodeToString(b)
-}
-
 // 用户登录,成功返回用户信息,否则返回nil
 func signIn(username, password string, r *ghttp.Request) (error, *user.User) {
 	user, err := user.Model.Where("user_name=? and user_password=?", username, password).One()
@@ -225,7 +195,7 @@ func loginLog(status int, username, ip, userAgent, msg string) {
 	var log sys_login_log.Entity
 	log.LoginName = username
 	log.Ipaddr = ip
-	log.LoginLocation = GetCityByIp(log.Ipaddr)
+	log.LoginLocation = utils.GetCityByIp(log.Ipaddr)
 	ua := user_agent.New(userAgent)
 	log.Browser, _ = ua.Browser()
 	log.Os = ua.OS()

+ 31 - 0
library/utils/tools.go

@@ -1,6 +1,8 @@
 package utils
 
 import (
+	"github.com/gogf/gf/crypto/gaes"
+	"github.com/gogf/gf/encoding/gbase64"
 	"github.com/gogf/gf/encoding/gcharset"
 	"github.com/gogf/gf/encoding/gjson"
 	"github.com/gogf/gf/frame/g"
@@ -10,6 +12,35 @@ import (
 	"time"
 )
 
+const AdminCbcPublicKey = "HqmP1KLMuz09Q0Bu"
+
+//字符串加密
+func EncryptCBC(plainText, publicKey string) string {
+	key := []byte(publicKey)
+	b, e := gaes.EncryptCBC([]byte(plainText), key, key)
+	if e != nil {
+		g.Log().Error(e.Error())
+		return ""
+	}
+	return gbase64.EncodeToString(b)
+}
+
+//字符串解密
+func DecryptCBC(plainText, publicKey string) string {
+	key := []byte(publicKey)
+	plainTextByte, e := gbase64.DecodeString(plainText)
+	if e != nil {
+		g.Log().Error(e.Error())
+		return ""
+	}
+	b, e := gaes.DecryptCBC(plainTextByte, key, key)
+	if e != nil {
+		g.Log().Error(e.Error())
+		return ""
+	}
+	return gbase64.EncodeToString(b)
+}
+
 //服务端ip
 func GetLocalIP() (ip string, err error) {
 	addrs, err := net.InterfaceAddrs()

+ 2 - 2
middleWare/middleware.go

@@ -7,7 +7,7 @@ import (
 	"gfast/app/service/admin/user_service"
 	"gfast/app/service/casbin_adapter_service"
 	"gfast/library/response"
-	"gfast/library/utils"
+	"gfast/library/service"
 	"github.com/gogf/gf/frame/g"
 	"github.com/gogf/gf/net/ghttp"
 	"github.com/gogf/gf/text/gstr"
@@ -24,7 +24,7 @@ func Auth(r *ghttp.Request) {
 	//获取登陆用户id
 	adminId := user_service.GetLoginID(r)
 	//获取无需验证权限的用户id
-	for _, v := range utils.NotCheckAuthAdminIds {
+	for _, v := range service.NotCheckAuthAdminIds {
 		if v == adminId {
 			r.Middleware.Next()
 			return