| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- package log
- import (
- "context"
- "errors"
- "github.com/go-redis/redis/v8"
- "go.uber.org/zap"
- "gorm.io/gorm"
- "log-server/global"
- "log-server/model/log"
- "log-server/model/log/request"
- "log-server/model/log/response"
- "log-server/service/cache"
- "strconv"
- "time"
- )
- type ServiceLogCoding struct {
- cache cache.Cache
- }
- var codeListCacheKey = "log:code"
- func (s *ServiceLogCoding) CreateCoding(requestCoding request.CodingLogRequest) (err error) {
- if !errors.Is(global.GVA_DB.Where("coding = ?", requestCoding.Coding).First(&log.CodingLog{}).Error, gorm.ErrRecordNotFound) {
- return errors.New("存在相同coding")
- }
- coding := new(log.CodingLog)
- if requestCoding.ParentId == 0 {
- coding.Level = 1
- } else {
- logCoding := new(log.CodingLog)
- err = global.GVA_DB.Where("id = ?", requestCoding.ParentId).First(logCoding).Error
- if err != nil {
- return err
- }
- if logCoding.Id == 0 {
- return errors.New("没有找到父节点")
- }
- if logCoding.Level >= 3 {
- return errors.New("该节点不能添加下级")
- }
- coding.Level = logCoding.Level + 1
- }
- coding.ParentId = requestCoding.ParentId
- coding.Coding = requestCoding.Coding
- coding.Describe = requestCoding.Describe
- coding.CreateTime = time.Now().Format("2006-01-02 15:04:05")
- coding.UpdateTime = time.Now().Format("2006-01-02 15:04:05")
- key := codeListCacheKey
- _ = s.cache.DelBatheHsCache(context.Background(), key)
- return global.GVA_DB.Create(&coding).Error
- }
- //@author: [piexlmax](https://github.com/piexlmax)
- //@function: UpdateLogCoding
- //@description: 根据id更新LogCoding
- //@param: CodingLog log.CodingLog
- //@return: err error
- func (s *ServiceLogCoding) UpdateLogCoding(requestCoding request.CodingLogRequest) (err error) {
- logCoding := new(log.CodingLog)
- err = global.GVA_DB.Where("id = ?", requestCoding.Id).First(logCoding).Error
- if err != nil {
- return err
- }
- var coding = make(map[string]interface{})
- coding["coding"] = requestCoding.Coding
- coding["describe"] = requestCoding.Describe
- coding["update_time"] = time.Now().Format("2006-01-02 15:04:05")
- err = global.GVA_DB.Model(&log.CodingLog{}).Where("id", requestCoding.Id).Updates(coding).Error
- if err == nil {
- key := codeListCacheKey
- _ = s.cache.DelBatheHsCache(context.Background(), key)
- }
- return err
- }
- func (s *ServiceLogCoding) GetCodeById(id int) (coding response.GetLogCodingReply, err error) {
- var api log.CodingLog
- err = global.GVA_DB.Where("id = ?", id).First(&api).Error
- if err != nil {
- return
- }
- coding.Id = api.Id
- coding.Coding = api.Coding
- coding.Describe = api.Describe
- coding.ParentId = api.ParentId
- coding.UpdateTime = api.UpdateTime
- coding.CreateTime = api.CreateTime
- return
- }
- func (s *ServiceLogCoding) GetCodeLogList(order string, desc bool) (list interface{}, total int64, err error) {
- db := global.GVA_DB.Model(&log.CodingLog{})
- var apiList []log.CodingLog
- err = db.Count(&total).Error
- if err != nil {
- return apiList, total, err
- } else {
- if order != "" {
- var OrderStr string
- // 设置有效排序key 防止sql注入
- // 感谢 Tom4t0 提交漏洞信息
- orderMap := make(map[string]bool, 4)
- orderMap["id"] = true
- if orderMap[order] {
- if desc {
- OrderStr = order + " desc"
- } else {
- OrderStr = order
- }
- } else { // didn't matched any order key in `orderMap`
- //global.GVA_LOG.Error(fmt.Sprintf("非法的排序字段: %v", order))
- return apiList, total, err
- }
- err = db.Order(OrderStr).Find(&apiList).Error
- } else {
- err = db.Order("id").Find(&apiList).Error
- }
- }
- var apisReply []*response.GetCodeListReply
- if len(apiList) != 0 {
- for _, apiInfo := range apiList {
- coding := new(response.GetCodeListReply)
- coding.Id = apiInfo.Id
- coding.Coding = apiInfo.Coding
- coding.Describe = apiInfo.Describe
- coding.ParentId = apiInfo.ParentId
- coding.UpdateTime = apiInfo.UpdateTime
- coding.CreateTime = apiInfo.CreateTime
- coding.Level = apiInfo.Level
- apisReply = append(apisReply, coding)
- }
- mi := make(map[uint]*response.GetCodeListReply)
- for _, item := range apisReply {
- mi[item.Id] = item
- }
- var list1 []*response.GetCodeListReply
- for _, item := range apisReply {
- if item.ParentId == 0 {
- list1 = append(list1, item)
- continue
- }
- if pitem, ok := mi[item.ParentId]; ok {
- pitem.Children = append(pitem.Children, item)
- }
- }
- return list1, total, err
- }
- return apisReply, total, err
- }
- func (s *ServiceLogCoding) CodeListCache(ctx context.Context, code string) (string, error) {
- key := codeListCacheKey
- status, err := global.GVA_REDIS.Exists(ctx, key).Result()
- if err != nil {
- global.GVA_LOG.Error("获取redis code失败!", zap.Error(err))
- return "", err
- }
- if status == 0 {
- var apiList []log.CodingLog
- err := global.GVA_DB.Model(&log.CodingLog{}).Find(&apiList).Error
- if err != nil {
- global.GVA_LOG.Error("获取表中 code失败!", zap.Error(err))
- return "", err
- }
- mps := make(map[string]string, len(apiList))
- for _, code := range apiList {
- c := strconv.Itoa(code.Coding)
- mps[c] = code.Describe
- }
- err = global.GVA_REDIS.HSet(ctx, key, mps).Err()
- if err != nil {
- global.GVA_LOG.Error("添加到redis code失败!", zap.Error(err))
- return "", err
- }
- }
- c, err := global.GVA_REDIS.HGet(ctx, key, code).Result()
- if err == redis.Nil {
- return code + "没有找数据", nil
- }
- return c, err
- }
|