From 52d6ec2b86005444441a7c7033d7d2ffd35631d2 Mon Sep 17 00:00:00 2001
From: liujiandao <274878379@qq.com>
Date: 星期二, 30 四月 2024 09:58:55 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.5.5:10010/r/silk/silkServer

---
 controllers/salary_plan_controller.go |   72 +++++++++++++++++++++++++++++++-----
 1 files changed, 62 insertions(+), 10 deletions(-)

diff --git a/controllers/salary_plan_controller.go b/controllers/salary_plan_controller.go
index 150a07c..02109c9 100644
--- a/controllers/salary_plan_controller.go
+++ b/controllers/salary_plan_controller.go
@@ -71,7 +71,7 @@
 		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
 		return
 	}
-	find, total, err := models.NewSalaryPlanSearch().SetPage(params.Page, params.PageSize).Find()
+	find, total, err := models.NewSalaryPlanSearch().SetPage(params.Page, params.PageSize).SetPreload(true).Find()
 	if err != nil {
 		util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘澶辫触")
 		return
@@ -127,23 +127,75 @@
 		util.ResponseFormat(c, code.RequestParamError, "绫诲瀷涓嶈兘涓虹┖")
 		return
 	}
-	types := make([]*models.MiniDict, 0)
-	for _, value := range params.Values {
+	miniDicts, err := models.NewMiniDictSearch().SetType(params.Type).FindNotTotal()
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, err)
+		return
+	}
+	dicts := params.Values
+	add := make([]*models.MiniDict, 0)
+	del := make([]uint, 0)
+	update := make([]*models.MiniDict, 0)
+	for _, mini := range miniDicts {
+		flag := true
+		for i, value := range dicts {
+			var dict models.MiniDict
+			dict.Name = value.Name
+			dict.IsDefault = value.IsDefault
+			dict.Type = params.Type
+			if value.Id == 0 {
+				add = append(add, &dict)
+				flag = false
+				if i < len(dicts)-1 {
+					dicts = append(dicts[:i], dicts[i+1:]...)
+				} else {
+					dicts = dicts[:i]
+				}
+				break
+			} else if value.Id == mini.ID {
+				update = append(update, &dict)
+				flag = false
+				if i < len(dicts)-1 {
+					dicts = append(dicts[:i], dicts[i+1:]...)
+				} else {
+					dicts = dicts[:i]
+				}
+				break
+			}
+		}
+		if flag {
+			del = append(del, mini.ID)
+		}
+	}
+	//鏂板鐨�
+	for _, value := range dicts {
 		var dict models.MiniDict
 		dict.Name = value.Name
 		dict.IsDefault = value.IsDefault
 		dict.Type = params.Type
-		types = append(types, &dict)
+		add = append(add, &dict)
 	}
+
 	err = models.WithTransaction(func(db *gorm.DB) error {
-		err = models.NewMiniDictSearch().SetOrm(db).SetType(params.Type).Delete()
-		if err != nil {
-			return err
+		if len(del) > 0 {
+			err = models.NewMiniDictSearch().SetOrm(db).SetIds(del).Delete()
+			if err != nil {
+				return err
+			}
 		}
-		err = models.NewMiniDictSearch().SetOrm(db).CreateBatch(types)
-		if err != nil {
-			return err
+		if len(update) > 0 {
+			err = models.NewMiniDictSearch().SetOrm(db).SaveBatch(update)
+			if err != nil {
+				return err
+			}
 		}
+		if len(add) > 0 {
+			err = models.NewMiniDictSearch().SetOrm(db).CreateBatch(add)
+			if err != nil {
+				return err
+			}
+		}
+
 		return nil
 	})
 	if err != nil {

--
Gitblit v1.8.0