| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- package Account
- import (
- "ERP_user/conf"
- "encoding/json"
- "fmt"
- "time"
- "github.com/astaxie/beego/cache"
- _ "github.com/astaxie/beego/cache/redis"
- "github.com/astaxie/beego/logs"
- "github.com/beego/beego/v2/adapter/orm"
- menulibs "gogs.baozhida.cn/zoie/ERP_libs/Menu"
- powerlibs "gogs.baozhida.cn/zoie/ERP_libs/Power"
- "gogs.baozhida.cn/zoie/ERP_libs/lib"
- )
- var redisCache_API cache.Cache
- var redisCache_Menu cache.Cache
- func init() {
- //注册模型
- orm.RegisterModel(new(menulibs.Menu))
- orm.RegisterModel(new(menulibs.API))
- var err error
- menuConfig := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
- "redis_User_Menu", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
- fmt.Println(menuConfig)
- redisCache_Menu, err = cache.NewCache("redis", menuConfig)
- if err != nil || redisCache_Menu == nil {
- errMsg := "failed to init redis menu"
- logs.Error(errMsg, err)
- panic(errMsg)
- }
- apiConfig := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
- "redis_ERP_USER_API", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
- fmt.Println(apiConfig)
- redisCache_API, err = cache.NewCache("redis", apiConfig)
- if err != nil || redisCache_API == nil {
- errMsg := "failed to init redis api"
- logs.Error(errMsg, err)
- panic(errMsg)
- }
- }
- func Redis_Munu_Set(T_power_id string, r []menulibs.Menu) (err error) {
- //json序列化
- str, err := json.Marshal(r)
- if err != nil {
- logs.Error(lib.FuncName(), err)
- return
- }
- err = redisCache_Menu.Put(T_power_id, str, 24*time.Hour)
- if err != nil {
- logs.Error("set key:", T_power_id+",value:", str, err)
- }
- return
- }
- func Redis_Menu_Get(T_power_id string) (r []menulibs.Menu, is bool) {
- if redisCache_Menu.IsExist(T_power_id) {
- //println("找到key:",key)
- v := redisCache_Menu.Get(T_power_id)
- err := json.Unmarshal(v.([]byte), &r)
- if err != nil {
- logs.Error(lib.FuncName(), err)
- return r, false
- }
- return r, true
- }
- return r, false
- }
- func Redis_Menu_DelK(T_power_id string) (err error) {
- err = redisCache_Menu.Delete(T_power_id)
- if err != nil {
- logs.Error(lib.FuncName(), err)
- return
- }
- return
- }
- // Redis_Menu_DelAll 清除所有菜单缓存
- func Redis_Menu_DelAll() (err error) {
- o := orm.NewOrm()
- powerDao := powerlibs.NewPower(o)
- // 获取所有权限ID列表(不分页,获取全部)
- // 使用较大的page_z值来获取所有权限
- powerList, _ := powerDao.Read_Power_List("", 1, 9999) // 假设最多10000个权限
- // 遍历所有权限ID,逐个删除缓存
- for _, power := range powerList {
- err = Redis_Menu_DelK(power.T_id)
- if err != nil {
- logs.Error(lib.FuncName(), "删除缓存失败:", power.T_id, err)
- // 继续删除其他缓存,不中断
- }
- }
- return nil
- }
- func Read_Menu_List() ([]menulibs.Menu, error) {
- o := orm.NewOrm()
- MenuDao := menulibs.NewMenu(o)
- m, err := MenuDao.Read_Menu_List()
- if err != nil {
- logs.Error(lib.FuncName(), err)
- return nil, err
- }
- return m, nil
- }
- // Read_User_Bind_Menu_List 获取用户绑定的菜单列表
- func Read_User_Bind_Menu_List(T_Menu string) ([]menulibs.Menu, error) {
- o := orm.NewOrm()
- MenuDao := menulibs.NewMenu(o)
- m, err := MenuDao.Read_Menu_List_ByPower_T_Menu(T_Menu)
- if err != nil {
- logs.Error(lib.FuncName(), err)
- return nil, err
- }
- return m, nil
- }
- // 获取列表
- func Read_API_List_ByPower(T_power_id string, Menu_Bind string) (maps []menulibs.API) {
- if len(Menu_Bind) == 0 {
- return
- }
- o := orm.NewOrm()
- APIDao := menulibs.NewAPI(o, redisCache_API)
- maps, err := APIDao.Read_API_List_ByPower(T_power_id, Menu_Bind)
- if err != nil {
- logs.Error(lib.FuncName(), err)
- return
- }
- return maps
- }
- // 添加菜单
- func Add_Menu(r menulibs.Menu) (id int, err error) {
- o := orm.NewOrm()
- _, err = o.Insert(&r)
- if err != nil {
- logs.Error(lib.FuncName(), err)
- return 0, err
- }
- return r.Id, err
- }
- // 获取菜单 ById
- func Read_Menu_ById(id int) (r menulibs.Menu, err error) {
- o := orm.NewOrm()
- r.Id = id
- err = o.Read(&r)
- if err != nil {
- logs.Error(lib.FuncName(), err)
- return r, err
- }
- return r, nil
- }
- // 修改菜单
- func Update_Menu(r menulibs.Menu, cols ...string) (id int, err error) {
- o := orm.NewOrm()
- _, err = o.Update(&r, cols...)
- if err != nil {
- logs.Error(lib.FuncName(), err)
- return r.Id, err
- }
- return r.Id, err
- }
- // 删除菜单(软删除,设置 T_State = 0)
- func Delete_Menu(r menulibs.Menu) (id int, err error) {
- o := orm.NewOrm()
- r.T_State = 0 // 软删除
- _, err = o.Update(&r, "T_State")
- if err != nil {
- logs.Error(lib.FuncName(), err)
- return r.Id, err
- }
- return r.Id, err
- }
- // ========== API 相关方法 ==========
- // 根据菜单ID获取API列表
- func Read_API_List_ByMenuId(T_Menu_Id int) (maps []menulibs.API, err error) {
- o := orm.NewOrm()
- APIDao := menulibs.NewAPI(o, redisCache_API)
- maps, err = APIDao.Read_API_List_ByMenuId(T_Menu_Id)
- if err != nil {
- logs.Error(lib.FuncName(), err)
- return maps, err
- }
- return maps, nil
- }
- // 批量添加API
- func InsertMulti_API(r []menulibs.API) (id int64, err error) {
- o := orm.NewOrm()
- APIDao := menulibs.NewAPI(o, redisCache_API)
- id, err = APIDao.InsertMulti_API(r)
- if err != nil {
- logs.Error(lib.FuncName(), err)
- return 0, err
- }
- return id, err
- }
- // 根据菜单ID删除所有关联的API(软删除)
- func Delete_API_ByMenuId(T_Menu_Id int) (int64, error) {
- o := orm.NewOrm()
- APIDao := menulibs.NewAPI(o, redisCache_API)
- cnt, err := APIDao.Delete_API_ByMenuId(T_Menu_Id)
- if err != nil {
- logs.Error(lib.FuncName(), err)
- return 0, err
- }
- return cnt, err
- }
- // Redis_API_DelAll 清除所有API缓存
- func Redis_API_DelAll() (err error) {
- o := orm.NewOrm()
- powerDao := powerlibs.NewPower(o)
- // 获取所有权限ID列表(不分页,获取全部)
- // 使用较大的page_z值来获取所有权限
- powerList, _ := powerDao.Read_Power_List("", 1, 9999) // 假设最多10000个权限
- // 遍历所有权限ID,逐个删除API缓存
- APIDao := menulibs.NewAPI(o, redisCache_API)
- for _, power := range powerList {
- err = APIDao.Redis_API_DelK(power.T_id)
- if err != nil {
- logs.Error(lib.FuncName(), "删除API缓存失败:", power.T_id, err)
- // 继续删除其他缓存,不中断
- }
- }
- return nil
- }
|