123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- package service
- import (
- "context"
- "encoding/json"
- "fmt"
- "go-common/app/admin/main/aegis/model/business"
- "go-common/app/admin/main/aegis/model/middleware"
- "go-common/library/ecode"
- "go-common/library/log"
- )
- // AddBusiness .
- func (s *Service) AddBusiness(c context.Context, b *business.Business) (id int64, err error) {
- if id, err = s.gorm.AddBusiness(c, b); err != nil {
- log.Error("s.gorm.AddBusiness error(%v)", err)
- }
- return
- }
- // UpdateBusiness .
- func (s *Service) UpdateBusiness(c context.Context, b *business.Business) (err error) {
- if err = s.gorm.UpdateBusiness(c, b); err != nil {
- log.Error("s.gorm.UpdateBusiness error(%v)", err)
- }
- return
- }
- // SetBusinessState .
- func (s *Service) SetBusinessState(c context.Context, b *business.Business) (err error) {
- if int8(b.State) == business.StateEnable {
- if err = s.gorm.EnableBusiness(c, b.ID); err != nil {
- log.Error("s.gorm.EnableBusiness error(%v)", err)
- }
- } else {
- if err = s.gorm.DisableBusiness(c, b.ID); err != nil {
- log.Error("s.gorm.EnableBusiness error(%v)", err)
- }
- }
- return
- }
- // Business .
- func (s *Service) Business(c context.Context, b *business.Business) (res *business.Business, err error) {
- if res, err = s.gorm.Business(c, b.ID); err != nil {
- log.Error("s.gorm.Business error(%v)", err)
- }
- return
- }
- // BusinessList .
- func (s *Service) BusinessList(c context.Context, businessID []int64, onlyEnable bool) (res []*business.Business, err error) {
- if res, err = s.gorm.BusinessList(c, 0, businessID, onlyEnable); err != nil {
- log.Error("s.gorm.BusinessList error(%v) ids(%+v)", err, businessID)
- }
- s.mulIDtoName(c, res, s.transUnames, "UID", "UserName")
- return
- }
- func (s *Service) transUnames(c context.Context, uids []int64) (unames map[int64][]interface{}, err error) {
- unames = make(map[int64][]interface{})
- uns, err := s.http.GetUnames(c, uids)
- if err != nil {
- return
- }
- for uid, uname := range uns {
- unames[uid] = []interface{}{uname}
- }
- return
- }
- // AddBizCFG .
- func (s *Service) AddBizCFG(c context.Context, b *business.BizCFG) (lastid int64, err error) {
- return s.gorm.AddBizConfig(c, b)
- }
- // UpdateBizCFG .
- func (s *Service) UpdateBizCFG(c context.Context, b *business.BizCFG) (err error) {
- if err = s.gorm.EditBizConfig(c, b); err != nil {
- log.Error("s.gorm.UpdateBizCFG error(%v)", err)
- return
- }
- delete(s.bizCfgCache, fmt.Sprintf("%d_%d", b.BusinessID, b.TP))
- delete(s.bizRoleCache, b.BusinessID)
- delete(s.taskRoleCache, b.BusinessID)
- delete(s.bizMiddlewareCache, b.BusinessID)
- return
- }
- // ListBizCFGs .
- func (s *Service) ListBizCFGs(c context.Context, bizid int64) (res []*business.BizCFG, err error) {
- if res, err = s.gorm.GetConfigs(c, bizid); err != nil {
- log.Error("s.gorm.ListBizCFGs error(%v)", err)
- }
- return
- }
- // ReserveCFG 保留字配置
- func (s *Service) ReserveCFG(c context.Context, bizid int64) (rsvcfg map[string]interface{}, err error) {
- var rsv string
- if rsv = s.getConfig(c, bizid, business.TypeReverse); len(rsv) == 0 {
- return
- }
- rsvcfg = make(map[string]interface{})
- if err = json.Unmarshal([]byte(rsv), &rsvcfg); err != nil {
- log.Error("json.Unmarshal error(%v)", err)
- err = ecode.AegisReservedCfgErr
- }
- return
- }
- // AttributeCFG 属性位配置
- func (s *Service) AttributeCFG(c context.Context, bizid int64) (attrcfg map[string]uint, err error) {
- var attr string
- if attr = s.getConfig(c, bizid, business.TypeAttribute); len(attr) == 0 {
- return
- }
- attrcfg = make(map[string]uint)
- if err = json.Unmarshal([]byte(attr), &attrcfg); err != nil {
- log.Error("json.Unmarshal error(%v)", err)
- }
- return
- }
- func (s *Service) syncBizCache(c context.Context) (err error) {
- var (
- bizcfg []*business.BizCFG
- )
- if bizcfg, err = s.gorm.ActiveConfigs(c); err != nil {
- return
- }
- bizTpMap := map[string]string{}
- bizRoleMap := map[int64]map[string]int64{}
- taskRoleMap := map[int64]map[int64][]int64{}
- bizMiddleware := map[int64][]*middleware.Aggregate{}
- for _, item := range bizcfg {
- bizTpMap[fmt.Sprintf("%d_%d", item.BusinessID, item.TP)] = item.Config
- biz, taskRole, err := item.FormatMngBID()
- if err == nil && len(taskRole) > 0 {
- taskRoleMap[biz] = taskRole
- }
- bizID, bizRoles, err := item.FormatBizBID()
- if err == nil && len(bizRoles) > 0 {
- bizRoleMap[bizID] = bizRoles
- }
- mws, err := item.FormatAggregate()
- if err == nil && len(mws) > 0 {
- bizMiddleware[item.BusinessID] = mws
- }
- }
- s.bizCfgCache = bizTpMap
- s.bizRoleCache = bizRoleMap
- s.taskRoleCache = taskRoleMap
- s.bizMiddlewareCache = bizMiddleware
- return
- }
- func (s *Service) getConfig(c context.Context, bizid int64, tp int8) (cfg string) {
- var ok bool
- if cfg, ok = s.bizCfgCache[fmt.Sprintf("%d_%d", bizid, tp)]; ok {
- return cfg
- }
- s.syncBizCache(c)
- cfg = s.bizCfgCache[fmt.Sprintf("%d_%d", bizid, tp)]
- return
- }
- func (s *Service) getTaskRole(c context.Context, bizid int64) (cfgs map[int64][]int64) {
- var exist bool
- if cfgs, exist = s.taskRoleCache[bizid]; exist {
- return cfgs
- }
- s.syncBizCache(c)
- cfgs = s.taskRoleCache[bizid]
- return
- }
- func (s *Service) getTaskBiz(c context.Context, bids []int64) (bizs []int64, flows []int64) {
- bizs = []int64{}
- flows = []int64{}
- s.syncBizCache(c)
- for _, bid := range bids {
- for biz, item := range s.taskRoleCache {
- if v, exist := item[bid]; exist && len(v) > 0 {
- bizs = append(bizs, biz)
- flows = append(flows, v...)
- }
- }
- }
- return
- }
- func (s *Service) getBizRole(c context.Context, mngID int64) (bizRole map[string]int64, bizID int64) {
- for biz, item := range s.bizRoleCache {
- if item[business.BizBIDMngID] == mngID {
- bizID = biz
- bizRole = item
- return
- }
- }
- s.syncBizCache(c)
- for biz, item := range s.bizRoleCache {
- if item[business.BizBIDMngID] == mngID {
- bizID = biz
- bizRole = item
- break
- }
- }
- return
- }
|