suncloud 7 months ago
parent
commit
54adb5f453
5 changed files with 66 additions and 0 deletions
  1. 34 0
      boxcost/api/aadiffupdatetest.go
  2. 6 0
      boxcost/api/plan.go
  3. 23 0
      boxcost/api/utils.go
  4. 1 0
      boxcost/go.mod
  5. 2 0
      boxcost/go.sum

+ 34 - 0
boxcost/api/aadiffupdatetest.go

@@ -0,0 +1,34 @@
+package api
+
+import (
+	"box-cost/db/model"
+	"box-cost/db/repo"
+	"box-cost/log"
+	"errors"
+	"fmt"
+	"time"
+
+	"github.com/gin-gonic/gin"
+)
+
+// 更新生产计划
+func DiffUpdatePlanTest(c *gin.Context, apictx *ApiSession) (interface{}, error) {
+	var plan model.ProductPlan
+	err := c.ShouldBindJSON(&plan)
+	if err != nil {
+		fmt.Println(err)
+		log.Error(err)
+		return nil, errors.New("参数错误")
+	}
+	if plan.Id.Hex() == "" {
+		return nil, errors.New("id的为空")
+	}
+	plan.UpdateTime = time.Now()
+	// 查询更新前数据
+	// oldPlan := &model.ProductPlan{}
+	// repo.RepoSeachDoc(apictx.CreateRepoCtx(),&repo.DocSearchOptions{},oldPlan)
+	return repo.RepoUpdateSetDoc(apictx.CreateRepoCtx(), "product-plan_copy1", plan.Id.Hex(), &plan)
+	// 查询更新后数据
+	// 差异比较
+	// 记录到数据库中
+}

+ 6 - 0
boxcost/api/plan.go

@@ -1341,7 +1341,13 @@ func UpdateProductPlan(c *gin.Context, apictx *ApiSession) (interface{}, error)
 		return nil, errors.New("id的为空")
 	}
 	plan.UpdateTime = time.Now()
+	// 查询更新前数据
+	// oldPlan := &model.ProductPlan{}
+	// repo.RepoSeachDoc(apictx.CreateRepoCtx(),&repo.DocSearchOptions{},oldPlan)
 	return repo.RepoUpdateSetDoc(apictx.CreateRepoCtx(), repo.CollectionProductPlan, plan.Id.Hex(), &plan)
+	// 查询更新后数据
+	// 差异比较
+	// 记录到数据库中
 }
 
 // 删除生产计划

+ 23 - 0
boxcost/api/utils.go

@@ -5,6 +5,7 @@ import (
 	"box-cost/db/repo"
 	"box-cost/log"
 	"bytes"
+	"encoding/json"
 	"fmt"
 	"math"
 	"math/rand"
@@ -13,6 +14,7 @@ import (
 	"time"
 	"unsafe"
 
+	"github.com/sergi/go-diff/diffmatchpatch"
 	"github.com/thecodingmachine/gotenberg-go-client/v7"
 	"go.mongodb.org/mongo-driver/bson"
 	"go.mongodb.org/mongo-driver/bson/primitive"
@@ -20,6 +22,27 @@ import (
 
 var SignatureDir string = "https://www.3dqueen.cloud/box/v1/boxcost/public/"
 
+// 比较差异字符
+func diffUpdateData(oldObj any, newObj any) (diffStr string, err error) {
+	oldObjByte, err := json.Marshal(oldObj)
+	if err != nil {
+		return "", err
+	}
+	newObjByte, err := json.Marshal(newObj)
+	if err != nil {
+		return "", err
+	}
+
+	dmp := diffmatchpatch.New()
+	diffs := dmp.DiffMain(string(oldObjByte), string(newObjByte), false)
+	// 返回差异数据用于日志记录
+	if len(diffs) > 0 {
+		return dmp.DiffPrettyText(diffs), nil
+	}
+
+	return "", err
+}
+
 func makeBillQuery(query map[string]interface{}) map[string]interface{} {
 	if query["packId"] != nil {
 		query["packId"], _ = primitive.ObjectIDFromHex(query["packId"].(string))

+ 1 - 0
boxcost/go.mod

@@ -12,6 +12,7 @@ require (
 	github.com/go-redis/redis/v8 v8.11.5
 	github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.12+incompatible
 	github.com/natefinch/lumberjack v2.0.0+incompatible
+	github.com/sergi/go-diff v1.3.1
 	github.com/spf13/viper v1.9.0
 	github.com/xuri/excelize/v2 v2.6.1
 	go.mongodb.org/mongo-driver v1.11.1

+ 2 - 0
boxcost/go.sum

@@ -1120,6 +1120,8 @@ github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24
 github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
 github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo=
 github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg=
+github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8=
+github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I=
 github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI=
 github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
 github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=