From 92fedbbcbaefa5c1c85cc4f3d23c32a2ff0585e2 Mon Sep 17 00:00:00 2001 From: chenyifan01 Date: Mon, 15 Aug 2022 10:28:39 +0800 Subject: [PATCH] #2624 add admin operate log --- models/models.go | 1 + routers/admin/resources.go | 8 +-- services/admin/operate_log/operate_log.go | 8 +++ .../resource/resource_specification.go | 51 ++++++++++++++++--- 4 files changed, 56 insertions(+), 12 deletions(-) create mode 100644 services/admin/operate_log/operate_log.go diff --git a/models/models.go b/models/models.go index d6198c720..906acc58b 100755 --- a/models/models.go +++ b/models/models.go @@ -149,6 +149,7 @@ func init() { new(ResourceSpecification), new(ResourceScene), new(ResourceSceneSpec), + new(AdminOperateLog), ) tablesStatistic = append(tablesStatistic, diff --git a/routers/admin/resources.go b/routers/admin/resources.go index fda602426..0c81bc3dd 100644 --- a/routers/admin/resources.go +++ b/routers/admin/resources.go @@ -135,7 +135,7 @@ func GetResourceSpecificationList(ctx *context.Context) { func AddResourceSpecification(ctx *context.Context, req models.ResourceSpecificationReq) { req.IsAutomaticSync = false req.CreatorId = ctx.User.ID - err := resource.AddResourceSpecification(req) + err := resource.AddResourceSpecification(ctx.User.ID, req) if err != nil { log.Error("AddResourceQueue error. %v", err) ctx.JSON(http.StatusOK, response.ServerError(err.Error())) @@ -156,11 +156,11 @@ func UpdateResourceSpecification(ctx *context.Context, req models.ResourceSpecif return } //only UnitPrice and permitted to change - err = resource.UpdateResourceSpecification(id, req) + err = resource.UpdateResourceSpecification(ctx.User.ID, id, req) case "on-shelf": - err = resource.ResourceSpecOnShelf(id, req) + err = resource.ResourceSpecOnShelf(ctx.User.ID, id, req) case "off-shelf": - err = resource.ResourceSpecOffShelf(id) + err = resource.ResourceSpecOffShelf(ctx.User.ID, id) } if err != nil { diff --git a/services/admin/operate_log/operate_log.go b/services/admin/operate_log/operate_log.go new file mode 100644 index 000000000..5328a6f9a --- /dev/null +++ b/services/admin/operate_log/operate_log.go @@ -0,0 +1,8 @@ +package operate_log + +import "code.gitea.io/gitea/models" + +func Log(log models.AdminOperateLog) error { + _, err := models.InsertAdminOperateLog(log) + return err +} diff --git a/services/cloudbrain/resource/resource_specification.go b/services/cloudbrain/resource/resource_specification.go index 1b327aa59..0093ab4cd 100644 --- a/services/cloudbrain/resource/resource_specification.go +++ b/services/cloudbrain/resource/resource_specification.go @@ -4,26 +4,43 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/grampus" "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/services/admin/operate_log" + "encoding/json" "errors" + "fmt" "strings" ) -func AddResourceSpecification(req models.ResourceSpecificationReq) error { +func AddResourceSpecification(doerId int64, req models.ResourceSpecificationReq) error { if req.Status == 0 { req.Status = models.SpecNotVerified } - if _, err := models.InsertResourceSpecification(req.ToDTO()); err != nil { + spec := req.ToDTO() + if _, err := models.InsertResourceSpecification(spec); err != nil { return err } return nil } -func UpdateResourceSpecification(specId int64, req models.ResourceSpecificationReq) error { - if _, err := models.UpdateResourceSpecificationById(specId, models.ResourceSpecification{ +func UpdateResourceSpecification(doerId int64, specId int64, req models.ResourceSpecificationReq) error { + oldSpec, err := models.GetResourceSpecification(&models.ResourceSpecification{ID: specId}) + if err != nil { + return err + } + if oldSpec == nil { + return errors.New("specification not exist") + } + n, err := models.UpdateResourceSpecificationById(specId, models.ResourceSpecification{ UnitPrice: req.UnitPrice, - }); err != nil { + }) + if err != nil { return err } + + if n > 0 { + newSpec, _ := models.GetResourceSpecification(&models.ResourceSpecification{ID: specId}) + AddSpecOperateLog(doerId, "edit", newSpec, oldSpec, fmt.Sprintf("修改单价从%d积分到%d积分", oldSpec.UnitPrice, newSpec.UnitPrice)) + } return nil } @@ -108,7 +125,7 @@ func GetResourceSpecificationList(opts models.SearchResourceSpecificationOptions return models.NewResourceSpecAndQueueListRes(n, r), nil } -func ResourceSpecOnShelf(id int64, req models.ResourceSpecificationReq) error { +func ResourceSpecOnShelf(doerId int64, id int64, req models.ResourceSpecificationReq) error { spec, err := models.GetResourceSpecification(&models.ResourceSpecification{ID: id}) if err != nil { return err @@ -120,16 +137,20 @@ func ResourceSpecOnShelf(id int64, req models.ResourceSpecificationReq) error { return errors.New("resource queue not available") } - _, err = models.ResourceSpecOnShelf(id, models.ResourceSpecification{ + n, err := models.ResourceSpecOnShelf(id, models.ResourceSpecification{ UnitPrice: req.UnitPrice, }) if err != nil { return err } + if n > 0 { + newSpec, _ := models.GetResourceSpecification(&models.ResourceSpecification{ID: id}) + AddSpecOperateLog(doerId, "on-shelf", newSpec, spec, fmt.Sprintf("修改单价从%d积分到%d积分", spec.UnitPrice, newSpec.UnitPrice)) + } return nil } -func ResourceSpecOffShelf(id int64) error { +func ResourceSpecOffShelf(doerId int64, id int64) error { _, err := models.ResourceSpecOffShelf(id) if err != nil { return err @@ -137,3 +158,17 @@ func ResourceSpecOffShelf(id int64) error { return nil } + +func AddSpecOperateLog(doerId int64, operateType string, newSpec, oldSpec *models.ResourceSpecification, comment string) { + newJson, _ := json.Marshal(newSpec) + oldJson, _ := json.Marshal(oldSpec) + operate_log.Log(models.AdminOperateLog{ + BizType: "SpecOperate", + OperateType: operateType, + OldValue: string(newJson), + NewValue: string(oldJson), + RelatedId: fmt.Sprint(newSpec.ID), + Comment: comment, + CreatedBy: doerId, + }) +}