Browse Source

fix:Ppt排序

Roc 5 days ago
parent
commit
e42c181fe7

+ 44 - 1
models/ppt_english/ppt_english_group_mapping.go

@@ -1,6 +1,7 @@
 package ppt_english
 
 import (
+	sql2 "database/sql"
 	"eta/eta_api/global"
 	"eta/eta_api/utils"
 	"time"
@@ -10,7 +11,7 @@ import (
 type PptEnglishGroupMapping struct {
 	GroupPptId      int64     `orm:"column(group_ppt_id);pk" gorm:"primaryKey" description:"自增序号"`
 	GroupId         int64     `description:"ppt目录ID"`
-	PptSort         int64     `description:"Ppt的排序"`
+	PptSort         float64   `description:"Ppt的排序"`
 	PptId           int64     `description:"ppt ID"`
 	CreateTime      time.Time `orm:"auto_now_add;type(datetime)" description:"创建时间"`
 	ModifyTime      time.Time `orm:"auto_now;type(datetime)" description:"修改时间"`
@@ -166,3 +167,45 @@ func GetPublicGroupPptByPptIds(pptIds []string) (list []*PptEnglishGroupMapping,
 	err = o.Raw(sql).Find(&list).Error
 	return
 }
+
+// GetMaxSortByGroupId
+// @Description: 根据分组id获取最大排序
+// @author: Roc
+// @datetime 2025-03-07 18:22:56
+// @param groupPptId int64
+// @return pptSort float64
+// @return err error
+func GetMaxSortByEnglishGroupId(groupPptId int64) (pptSort float64, err error) {
+	o := global.DbMap[utils.DbNameReport]
+	sql := `select MAX(ppt_sort) AS count from ppt_english_group_mapping where group_id=?`
+	var sortNull sql2.NullFloat64
+	err = o.Raw(sql, groupPptId).Scan(&sortNull).Error
+	if err != nil {
+		return
+	}
+	if sortNull.Valid {
+		pptSort = sortNull.Float64
+	}
+	return
+}
+
+// GetMinSortByGroupId
+// @Description: 根据分组id获取最大排序
+// @author: Roc
+// @datetime 2025-03-07 18:22:56
+// @param groupPptId int64
+// @return pptSort float64
+// @return err error
+func GetMinSortByEnglishGroupId(groupPptId int64) (pptSort float64, err error) {
+	o := global.DbMap[utils.DbNameReport]
+	sql := `select MIN(ppt_sort) AS count from ppt_english_group_mapping where group_id=?`
+	var sortNull sql2.NullFloat64
+	err = o.Raw(sql, groupPptId).Scan(&sortNull).Error
+	if err != nil {
+		return
+	}
+	if sortNull.Valid {
+		pptSort = sortNull.Float64
+	}
+	return
+}

+ 2 - 2
models/ppt_v2_group_mapping.go

@@ -192,7 +192,7 @@ func GetPublicGroupPptByPptIds(pptIds []string) (list []*PptV2GroupMapping, err
 // @return err error
 func GetMaxSortByGroupId(groupPptId int64) (pptSort float64, err error) {
 	o := global.DbMap[utils.DbNameReport]
-	sql := `select MAX(ppt_sort) AS count from ppt_v2_group_mapping where group_ppt_id=?`
+	sql := `select MAX(ppt_sort) AS count from ppt_v2_group_mapping where group_id=?`
 	var sortNull sql2.NullFloat64
 	err = o.Raw(sql, groupPptId).Scan(&sortNull).Error
 	if err != nil {
@@ -213,7 +213,7 @@ func GetMaxSortByGroupId(groupPptId int64) (pptSort float64, err error) {
 // @return err error
 func GetMinSortByGroupId(groupPptId int64) (pptSort float64, err error) {
 	o := global.DbMap[utils.DbNameReport]
-	sql := `select MIN(ppt_sort) AS count from ppt_v2_group_mapping where group_ppt_id=?`
+	sql := `select MIN(ppt_sort) AS count from ppt_v2_group_mapping where group_id=?`
 	var sortNull sql2.NullFloat64
 	err = o.Raw(sql, groupPptId).Scan(&sortNull).Error
 	if err != nil {

+ 157 - 44
services/ppt/ppt_english_group.go

@@ -8,6 +8,7 @@ import (
 	"eta/eta_api/services"
 	"eta/eta_api/utils"
 	"fmt"
+	"github.com/shopspring/decimal"
 	"sort"
 	"strconv"
 	"strings"
@@ -61,11 +62,21 @@ func AddGroupPptEnglishMapping(pptId int64, groupId int64, adminId int, adminRea
 		err = errors.New("目录查询出错:" + err.Error())
 		return
 	}
+
+	// 获取当前目录下最大的排序
+	pptSort, err := ppt_english.GetMaxSortByEnglishGroupId(groupId)
+	if err != nil {
+		err = errors.New("查询最大排序出错:" + err.Error())
+		return
+	}
+	newSort, _ := decimal.NewFromFloat(pptSort).Add(decimal.NewFromInt(1)).Float64()
+
 	bindInfo := &ppt_english.PptEnglishGroupMapping{
 		GroupId:       groupId,
 		PptId:         pptId,
 		AdminId:       adminId,
 		AdminRealName: adminRealName,
+		PptSort:       newSort,
 	}
 
 	newId, err = ppt_english.AddPptGroupMapping(bindInfo)
@@ -74,13 +85,13 @@ func AddGroupPptEnglishMapping(pptId int64, groupId int64, adminId int, adminRea
 		return
 	}
 
-	bindInfo.GroupPptId = newId
-	bindInfo.PptSort = newId
-	err = bindInfo.Update([]string{"ppt_sort"})
-	if err != nil {
-		err = errors.New("更新排序失败:" + err.Error())
-		return
-	}
+	//bindInfo.GroupPptId = newId
+	//bindInfo.PptSort = newId
+	//err = bindInfo.Update([]string{"ppt_sort"})
+	//if err != nil {
+	//	err = errors.New("更新排序失败:" + err.Error())
+	//	return
+	//}
 	return
 }
 
@@ -227,12 +238,13 @@ func CopyEnglishGroup(groupId int64, adminId int, adminRealName string) (err err
 		}
 
 		newMappings := make([]*ppt_english.PptEnglishGroupMapping, 0)
-		for _, v := range newPptList {
+		for k, v := range newPptList {
 			tmp := &ppt_english.PptEnglishGroupMapping{
 				GroupId:       newGroupId,
 				PptId:         int64(v.PptId),
 				CreateTime:    time.Now(),
 				ModifyTime:    time.Now(),
+				PptSort:       float64(k + 1),
 				AdminId:       adminId,
 				AdminRealName: adminRealName,
 			}
@@ -244,15 +256,15 @@ func CopyEnglishGroup(groupId int64, adminId int, adminRealName string) (err err
 			return
 		}
 		//批量更新排序字段
-		var newGroupPptIds []int64
-		for _, v := range newMappings {
-			newGroupPptIds = append(newGroupPptIds, v.GroupPptId)
-		}
-		err = ppt_english.UpdatePptGroupMappingSortMulti(newGroupPptIds)
-		if err != nil {
-			err = errors.New("更新排序标识出错:" + err.Error())
-			return
-		}
+		//var newGroupPptIds []int64
+		//for _, v := range newMappings {
+		//	newGroupPptIds = append(newGroupPptIds, v.GroupPptId)
+		//}
+		//err = ppt_english.UpdatePptGroupMappingSortMulti(newGroupPptIds)
+		//if err != nil {
+		//	err = errors.New("更新排序标识出错:" + err.Error())
+		//	return
+		//}
 	}
 	return
 }
@@ -402,6 +414,102 @@ func GetGroupPptEnglishList(groupId int64, adminId int) (ret ppt_english.RespGro
 	return
 }
 
+// MoveGroupPptEnglish 移动ppt操作
+//func MoveGroupPptEnglish(groupId, groupPptId, prevGroupPptId, nextGroupPptId int64, adminId int) (err error) {
+//	//查询当前映射是否存在
+//	//判断当前登录者是否有共享的权限oo
+//	groupPpt, err := ppt_english.GetPptMappingByGroupPptId(groupPptId, adminId)
+//	if err != nil {
+//		if utils.IsErrNoRow(err) {
+//			err = errors.New("当前目录下的ppt不存在")
+//			return
+//		}
+//		err = errors.New("目录下的ppt查询出错:" + err.Error())
+//		return
+//	}
+//	var updateStr []string
+//	//如果更换了目录,默认当前排序值为0
+//	var currentSort, prevSort, nextSort int64
+//	//判断是否更换group
+//	if groupPpt.GroupId != groupId {
+//		_, err = ppt_english.GetPptGroupByGroupIdAdminId(groupId, adminId)
+//		if err != nil {
+//			if utils.IsErrNoRow(err) {
+//				err = errors.New("目录不存在")
+//				return
+//			}
+//			err = errors.New("目录查询出错:" + err.Error())
+//			return
+//		}
+//		//判断是否需要解除当个ppt共享
+//		//解除共享操作
+//		err = CancelShareSingleGroupPptEnglish(groupPpt, adminId)
+//		if err != nil {
+//			err = errors.New(err.Error())
+//			return
+//		}
+//		groupPpt.GroupId = groupId
+//		updateStr = append(updateStr, "group_id")
+//	}
+//	currentSort = groupPpt.PptSort
+//
+//	var prevGroupPpt *ppt_english.PptEnglishGroupMapping
+//	var nextGroupPpt *ppt_english.PptEnglishGroupMapping
+//	if prevGroupPptId > 0 {
+//		prevGroupPpt, err = ppt_english.GetPptMappingByGroupPptId(prevGroupPptId, adminId)
+//		if err != nil {
+//			if utils.IsErrNoRow(err) {
+//				err = errors.New("目录下的ppt不存在")
+//				return
+//			}
+//			err = errors.New("目录下的ppt查询出错:" + err.Error())
+//			return
+//		}
+//		prevSort = prevGroupPpt.PptSort
+//	}
+//
+//	if nextGroupPptId > 0 {
+//		nextGroupPpt, err = ppt_english.GetPptMappingByGroupPptId(nextGroupPptId, adminId)
+//		if err != nil {
+//			if utils.IsErrNoRow(err) {
+//				err = errors.New("目录下的ppt不存在")
+//				return
+//			}
+//			err = errors.New("目录下的ppt查询出错:" + err.Error())
+//			return
+//		}
+//		nextSort = nextGroupPpt.PptSort
+//	}
+//
+//	updateStr = append(updateStr, "ppt_sort")
+//
+//	//移到两个排序值中间操作
+//	if prevSort >= currentSort {
+//		//往下移动
+//		err = ppt_english.MoveDownGroupPptBySort(groupId, prevSort, currentSort)
+//		if err != nil {
+//			err = errors.New("向下移动ppt出错:" + err.Error())
+//			return
+//		}
+//		groupPpt.PptSort = prevSort
+//	} else if nextSort <= currentSort && nextSort != 0 {
+//		//往上移动
+//		err = ppt_english.MoveUpGroupPptBySort(groupId, nextSort, currentSort)
+//		if err != nil {
+//			err = errors.New("向上移动ppt出错:" + err.Error())
+//			return
+//		}
+//		groupPpt.PptSort = nextSort
+//	}
+//	//更新当前排序
+//	err = groupPpt.Update(updateStr)
+//	if err != nil {
+//		err = errors.New("移动ppt出错:" + err.Error())
+//		return
+//	}
+//	return
+//}
+
 // MoveGroupPptEnglish 移动ppt操作
 func MoveGroupPptEnglish(groupId, groupPptId, prevGroupPptId, nextGroupPptId int64, adminId int) (err error) {
 	//查询当前映射是否存在
@@ -416,8 +524,6 @@ func MoveGroupPptEnglish(groupId, groupPptId, prevGroupPptId, nextGroupPptId int
 		return
 	}
 	var updateStr []string
-	//如果更换了目录,默认当前排序值为0
-	var currentSort, prevSort, nextSort int64
 	//判断是否更换group
 	if groupPpt.GroupId != groupId {
 		_, err = ppt_english.GetPptGroupByGroupIdAdminId(groupId, adminId)
@@ -439,7 +545,6 @@ func MoveGroupPptEnglish(groupId, groupPptId, prevGroupPptId, nextGroupPptId int
 		groupPpt.GroupId = groupId
 		updateStr = append(updateStr, "group_id")
 	}
-	currentSort = groupPpt.PptSort
 
 	var prevGroupPpt *ppt_english.PptEnglishGroupMapping
 	var nextGroupPpt *ppt_english.PptEnglishGroupMapping
@@ -453,7 +558,6 @@ func MoveGroupPptEnglish(groupId, groupPptId, prevGroupPptId, nextGroupPptId int
 			err = errors.New("目录下的ppt查询出错:" + err.Error())
 			return
 		}
-		prevSort = prevGroupPpt.PptSort
 	}
 
 	if nextGroupPptId > 0 {
@@ -466,29 +570,28 @@ func MoveGroupPptEnglish(groupId, groupPptId, prevGroupPptId, nextGroupPptId int
 			err = errors.New("目录下的ppt查询出错:" + err.Error())
 			return
 		}
-		nextSort = nextGroupPpt.PptSort
 	}
-
-	updateStr = append(updateStr, "ppt_sort")
-
-	//移到两个排序值中间操作
-	if prevSort >= currentSort {
-		//往下移动
-		err = ppt_english.MoveDownGroupPptBySort(groupId, prevSort, currentSort)
-		if err != nil {
-			err = errors.New("向下移动ppt出错:" + err.Error())
+	pptSort := groupPpt.PptSort
+	if prevGroupPpt != nil && prevGroupPpt.PptId > 0 && nextGroupPpt != nil && nextGroupPpt.PptId > 0 { // 两个之间
+		pptSort, _ = decimal.NewFromFloat(prevGroupPpt.PptSort).Add(decimal.NewFromFloat(nextGroupPpt.PptSort)).Div(decimal.NewFromInt(2)).Float64()
+	} else if prevGroupPpt != nil && prevGroupPpt.PptId > 0 {
+		minSort, tmpErr := ppt_english.GetMinSortByEnglishGroupId(prevGroupPpt.GroupId)
+		if tmpErr != nil {
+			err = errors.New("获取最小排序失败:" + tmpErr.Error())
 			return
 		}
-		groupPpt.PptSort = prevSort
-	} else if nextSort <= currentSort && nextSort != 0 {
-		//往上移动
-		err = ppt_english.MoveUpGroupPptBySort(groupId, nextSort, currentSort)
-		if err != nil {
-			err = errors.New("向上移动ppt出错:" + err.Error())
+		pptSort, _ = decimal.NewFromFloat(minSort).Add(decimal.NewFromInt(1)).Float64()
+	} else if nextGroupPpt != nil && nextGroupPpt.PptId > 0 {
+		maxSort, tmpErr := ppt_english.GetMaxSortByEnglishGroupId(prevGroupPpt.GroupId)
+		if tmpErr != nil {
+			err = errors.New("获取最小排序失败:" + tmpErr.Error())
 			return
 		}
-		groupPpt.PptSort = nextSort
+		pptSort, _ = decimal.NewFromFloat(maxSort).Sub(decimal.NewFromInt(1)).Float64()
 	}
+
+	groupPpt.PptSort = pptSort
+	updateStr = append(updateStr, "ppt_sort")
 	//更新当前排序
 	err = groupPpt.Update(updateStr)
 	if err != nil {
@@ -700,6 +803,15 @@ func CopyPptEnglish(pptId int, groupId int64, adminId int, adminRealName string)
 		err = errors.New("复制目录里的ppt出错:" + err.Error())
 		return
 	}
+
+	// 获取当前目录下最大的排序
+	pptSort, err := ppt_english.GetMaxSortByEnglishGroupId(groupId)
+	if err != nil {
+		err = errors.New("查询最大排序出错:" + err.Error())
+		return
+	}
+	newSort, _ := decimal.NewFromFloat(pptSort).Add(decimal.NewFromInt(1)).Float64()
+
 	var newMappings []*ppt_english.PptEnglishGroupMapping
 	newGroupPpt := &ppt_english.PptEnglishGroupMapping{
 		GroupId:       groupId,
@@ -708,6 +820,7 @@ func CopyPptEnglish(pptId int, groupId int64, adminId int, adminRealName string)
 		ModifyTime:    time.Now(),
 		AdminId:       adminId,
 		AdminRealName: adminRealName,
+		PptSort:       newSort,
 	}
 	newMappings = append(newMappings, newGroupPpt)
 
@@ -716,12 +829,12 @@ func CopyPptEnglish(pptId int, groupId int64, adminId int, adminRealName string)
 		err = errors.New("复制目录里的ppt出错:" + err.Error())
 		return
 	}
-	//批量更新排序字段
-	err = ppt_english.UpdatePptGroupMappingSortMulti([]int64{newGroupPpt.GroupPptId})
-	if err != nil {
-		err = errors.New("更新排序标识出错:" + err.Error())
-		return
-	}
+	////批量更新排序字段
+	//err = ppt_english.UpdatePptGroupMappingSortMulti([]int64{newGroupPpt.GroupPptId})
+	//if err != nil {
+	//	err = errors.New("更新排序标识出错:" + err.Error())
+	//	return
+	//}
 	var pptPage int
 	if newPpt.Content != "" {
 		contents := make([]PageContent, 0)

+ 2 - 0
services/ppt/ppt_group.go

@@ -916,12 +916,14 @@ func MoveGroup(groupId, prevGroupId, nextGroupId int64, adminId int) (err error)
 		}
 		groupInfo.GroupSort = nextSort
 	}
+
 	//更新当前排序
 	err = groupInfo.Update([]string{"group_sort"})
 	if err != nil {
 		err = errors.New("移动目录出错:" + err.Error())
 		return
 	}
+
 	return
 }