liujiandao
2024-04-30 76a84d89d63041232c646ca28c59239dd00f7fc5
controllers/salary_plan_controller.go
@@ -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 {