Browse Source

fix:Ppt排序

Roc 5 days ago
parent
commit
3b173e1b66
4 changed files with 187 additions and 217 deletions
  1. 5 0
      models/ppt_v2.go
  2. 50 3
      models/ppt_v2_group_mapping.go
  3. 0 62
      services/ppt/ppt_english_group.go
  4. 132 152
      services/ppt/ppt_group.go

+ 5 - 0
models/ppt_v2.go

@@ -178,6 +178,11 @@ func GetPptV2ByIds(pptIds []int) (list []*PptV2, err error) {
 	return
 }
 
+func GetOrderPptV2ByIdList(pptIds []int) (list []*PptV2, err error) {
+	err = global.DbMap[utils.DbNameReport].Table("ppt_v2").Where("ppt_id IN ?", pptIds).Order(``).Find(&list).Error
+	return
+}
+
 //func GetPptV2ByTitle(title string) (item *PptV2, err error) {
 //	o := global.DbMap[utils.DbNameReport]
 //	sql := `SELECT * FROM ppt_v2 WHERE 1=1 AND title=? `

+ 50 - 3
models/ppt_v2_group_mapping.go

@@ -11,7 +11,7 @@ import (
 type PptV2GroupMapping struct {
 	GroupPptId      int64     `gorm:"column:group_ppt_id;primaryKey;autoIncrement" description:"自增序号"`
 	GroupId         int64     `description:"ppt目录ID"`
-	PptSort         int64     `description:"Ppt的排序"`
+	PptSort         float64   `description:"Ppt的排序"`
 	PptId           int64     `description:"ppt ID"`
 	CreateTime      time.Time `gorm:"column:create_time;type:datetime;comment:创建时间;not null;default:CURRENT_TIMESTAMP;"  description:"创建时间"`
 	ModifyTime      time.Time `gorm:"column:modify_time;type:datetime;comment:修改时间;not null;default:CURRENT_TIMESTAMP;" description:"修改时间"`
@@ -50,14 +50,19 @@ func GetPptMappingCountByGroupId(groupId int64) (total int64, err error) {
 // GetPptMappingListByGroupId 查询目录下,ppt列表
 func GetPptMappingListByGroupId(groupId int64) (list []*PptV2GroupMapping, err error) {
 	o := global.DbMap[utils.DbNameReport]
-	sql := `select group_ppt_id, group_id, ppt_id, ppt_sort, admin_id, admin_real_name, create_time from ppt_v2_group_mapping where group_id=? order by ppt_sort asc, group_ppt_id desc `
+	sql := `select a.group_ppt_id, a.group_id, a.ppt_id, a.ppt_sort, a.admin_id, a.admin_real_name, a.create_time from ppt_v2_group_mapping AS a
+            JOIN ppt_v2 b on a.ppt_id = b.ppt_id where a.group_id=? order by a.ppt_sort desc, b.modify_time desc `
 	err = o.Raw(sql, groupId).Find(&list).Error
+
 	return
 }
 
 // GetPptMappingListByGroupIds 根据分组ID查找
 func GetPptMappingListByGroupIds(groupIds []int64) (list []*PptV2GroupMapping, err error) {
-	err = global.DbMap[utils.DbNameReport].Table("ppt_v2_group_mapping").Where("group_id in ?", groupIds).Find(&list).Error
+	sql := `select a.group_ppt_id, a.group_id, a.ppt_id, a.ppt_sort, a.admin_id, a.admin_real_name, a.create_time from ppt_v2_group_mapping AS a
+            JOIN ppt_v2 b on a.ppt_id = b.ppt_id where a.group_id in (?) order by a.ppt_sort desc, b.modify_time desc `
+	err = global.DbMap[utils.DbNameReport].Raw(sql, groupIds).Find(&list).Error
+
 	return
 }
 
@@ -177,3 +182,45 @@ func GetPublicGroupPptByPptIds(pptIds []string) (list []*PptV2GroupMapping, err
 	err = o.Raw(sql, pptIds).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 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=?`
+	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 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=?`
+	var sortNull sql2.NullFloat64
+	err = o.Raw(sql, groupPptId).Scan(&sortNull).Error
+	if err != nil {
+		return
+	}
+	if sortNull.Valid {
+		pptSort = sortNull.Float64
+	}
+	return
+}

+ 0 - 62
services/ppt/ppt_english_group.go

@@ -292,68 +292,6 @@ func RenameEnglishGroupName(groupId int64, groupName string, adminId int) (err e
 	return
 }
 
-// ShareSingleEnglishGroupPpt 共享单个ppt/取消共享单个ppt,返回共享状态
-func ShareSingleEnglishGroupPpt(groupPptId int64, adminId int, adminRealName string) (ret ppt_english.RespPptShare, err error) {
-	//判断当前登录者是否有共享的权限
-	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
-	}
-	groupInfo, err := ppt_english.GetPptGroupByGroupIdAdminId(groupPpt.GroupId, adminId)
-	if err != nil {
-		if utils.IsErrNoRow(err) {
-			err = errors.New("目录不存在")
-			return
-		}
-		err = errors.New("目录查询出错:" + err.Error())
-		return
-	}
-	//判断当前的共享状态
-	if groupPpt.ChildGroupPptId > 0 {
-		err = CancelShareSingleGroupPptEnglish(groupPpt, adminId)
-		if err != nil {
-			err = errors.New(err.Error())
-			return
-		}
-		ret.IsSingleShare = 0
-	} else {
-		//如果是未共享状态,则共享该ppt,类似复制流程,并更新共享标识
-		//新增公共目录。目录名称在原来的基础上带上复制序号
-		groupNames, tErr := ppt_english.GetPptGroupNamesByAdminId(adminId)
-		if tErr != nil {
-			err = errors.New("目录查询出错:" + tErr.Error())
-			return
-		}
-		newGroupName := generateCopyName(groupInfo.GroupName, 1, groupNames)
-		newGroupId, tErr := AddGroup(newGroupName, adminId, 1, 1)
-		if tErr != nil {
-			err = errors.New(tErr.Error())
-			return
-		}
-		//新增公共的目录和ppt之间的映射关系
-		newGroupPptId, tErr := AddGroupPptMapping(groupPpt.PptId, newGroupId, adminId, adminRealName)
-		if tErr != nil {
-			err = errors.New(tErr.Error())
-			return
-		}
-		//更新共享标识
-		groupPpt.ChildGroupPptId = newGroupPptId
-		err = groupPpt.Update([]string{"child_group_ppt_id"})
-		if err != nil {
-			err = errors.New("更新共享标识失败" + err.Error())
-			return
-		}
-		ret.IsSingleShare = 1
-	}
-	ret.GroupPptId = groupPptId
-	return
-}
-
 // GetGroupPptEnglishList 公共目录下的ppt列表或者单个目录里的ppt列表
 func GetGroupPptEnglishList(groupId int64, adminId int) (ret ppt_english.RespGroupPptList, err error) {
 	var groupPptList []*ppt_english.PptEnglishGroupMapping

+ 132 - 152
services/ppt/ppt_group.go

@@ -8,6 +8,7 @@ import (
 	"eta/eta_api/services"
 	"eta/eta_api/utils"
 	"fmt"
+	"github.com/shopspring/decimal"
 	"sort"
 	"strconv"
 	"strings"
@@ -227,6 +228,15 @@ func AddGroupPptMapping(pptId int64, groupId int64, adminId int, adminRealName s
 		err = errors.New("目录查询出错:" + err.Error())
 		return
 	}
+
+	// 获取当前目录下最大的排序
+	pptSort, err := models.GetMaxSortByGroupId(groupId)
+	if err != nil {
+		err = errors.New("查询最大排序出错:" + err.Error())
+		return
+	}
+	newSort, _ := decimal.NewFromFloat(pptSort).Add(decimal.NewFromInt(1)).Float64()
+
 	bindInfo := &models.PptV2GroupMapping{
 		GroupId:       groupId,
 		PptId:         pptId,
@@ -234,7 +244,7 @@ func AddGroupPptMapping(pptId int64, groupId int64, adminId int, adminRealName s
 		AdminRealName: adminRealName,
 		CreateTime:    time.Now(),
 		ModifyTime:    time.Now(),
-		PptSort:       0,
+		PptSort:       newSort,
 	}
 
 	newId, err = models.AddPptGroupMapping(bindInfo)
@@ -402,7 +412,7 @@ func CopyGroup(groupId int64, adminId int, adminRealName string) (err error) {
 		}
 
 		newMappings := make([]*models.PptV2GroupMapping, 0)
-		for _, v := range newPptList {
+		for i, v := range newPptList {
 			tmp := &models.PptV2GroupMapping{
 				GroupId:       newGroupId,
 				PptId:         int64(v.PptId),
@@ -410,7 +420,7 @@ func CopyGroup(groupId int64, adminId int, adminRealName string) (err error) {
 				ModifyTime:    time.Now(),
 				AdminId:       adminId,
 				AdminRealName: adminRealName,
-				PptSort:       0,
+				PptSort:       float64(i + 1),
 			}
 			newMappings = append(newMappings, tmp)
 		}
@@ -658,6 +668,101 @@ func GetGroupPptList(groupId int64, adminId int) (ret models.RespGroupPptList, e
 }
 
 // MoveGroupPpt 移动ppt操作
+//func MoveGroupPpt(groupId, groupPptId, prevGroupPptId, nextGroupPptId int64, adminId int) (err error) {
+//	//查询当前映射是否存在
+//	//判断当前登录者是否有共享的权限oo
+//	groupPpt, err := models.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 = models.GetPptGroupByGroupIdAdminId(groupId, adminId)
+//		if err != nil {
+//			if utils.IsErrNoRow(err) {
+//				err = errors.New("目录不存在")
+//				return
+//			}
+//			err = errors.New("目录查询出错:" + err.Error())
+//			return
+//		}
+//		//判断是否需要解除当个ppt共享
+//		//解除共享操作
+//		err = CancelShareSingleGroupPpt(groupPpt, adminId)
+//		if err != nil {
+//			err = errors.New(err.Error())
+//			return
+//		}
+//		groupPpt.GroupId = groupId
+//		updateStr = append(updateStr, "group_id")
+//	}
+//	currentSort = groupPpt.PptSort
+//
+//	var prevGroupPpt *models.PptV2GroupMapping
+//	var nextGroupPpt *models.PptV2GroupMapping
+//	if prevGroupPptId > 0 {
+//		prevGroupPpt, err = models.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 = models.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 = models.MoveDownGroupPptBySort(groupId, prevSort, currentSort)
+//		if err != nil {
+//			err = errors.New("向下移动ppt出错:" + err.Error())
+//			return
+//		}
+//		groupPpt.PptSort = prevSort
+//	} else if nextSort <= currentSort && nextSort != 0 {
+//		//往上移动
+//		err = models.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
+//}
+
 func MoveGroupPpt(groupId, groupPptId, prevGroupPptId, nextGroupPptId int64, adminId int) (err error) {
 	//查询当前映射是否存在
 	//判断当前登录者是否有共享的权限oo
@@ -671,8 +776,6 @@ func MoveGroupPpt(groupId, groupPptId, prevGroupPptId, nextGroupPptId int64, adm
 		return
 	}
 	var updateStr []string
-	//如果更换了目录,默认当前排序值为0
-	var currentSort, prevSort, nextSort int64
 	//判断是否更换group
 	if groupPpt.GroupId != groupId {
 		_, err = models.GetPptGroupByGroupIdAdminId(groupId, adminId)
@@ -694,7 +797,6 @@ func MoveGroupPpt(groupId, groupPptId, prevGroupPptId, nextGroupPptId int64, adm
 		groupPpt.GroupId = groupId
 		updateStr = append(updateStr, "group_id")
 	}
-	currentSort = groupPpt.PptSort
 
 	var prevGroupPpt *models.PptV2GroupMapping
 	var nextGroupPpt *models.PptV2GroupMapping
@@ -708,7 +810,6 @@ func MoveGroupPpt(groupId, groupPptId, prevGroupPptId, nextGroupPptId int64, adm
 			err = errors.New("目录下的ppt查询出错:" + err.Error())
 			return
 		}
-		prevSort = prevGroupPpt.PptSort
 	}
 
 	if nextGroupPptId > 0 {
@@ -721,29 +822,29 @@ func MoveGroupPpt(groupId, groupPptId, prevGroupPptId, nextGroupPptId int64, adm
 			err = errors.New("目录下的ppt查询出错:" + err.Error())
 			return
 		}
-		nextSort = nextGroupPpt.PptSort
 	}
 
-	updateStr = append(updateStr, "ppt_sort")
-
-	//移到两个排序值中间操作
-	if prevSort >= currentSort {
-		//往下移动
-		err = models.MoveDownGroupPptBySort(groupId, prevSort, currentSort)
+	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, err := models.GetMinSortByGroupId(prevGroupPpt.GroupId)
 		if err != nil {
-			err = errors.New("向下移动ppt出错:" + err.Error())
+			err = errors.New("获取最小排序失败:" + err.Error())
 			return
 		}
-		groupPpt.PptSort = prevSort
-	} else if nextSort <= currentSort && nextSort != 0 {
-		//往上移动
-		err = models.MoveUpGroupPptBySort(groupId, nextSort, currentSort)
+		pptSort, _ = decimal.NewFromFloat(minSort).Add(decimal.NewFromInt(1)).Float64()
+	} else if nextGroupPpt != nil && nextGroupPpt.PptId > 0 {
+		maxSort, err := models.GetMaxSortByGroupId(prevGroupPpt.GroupId)
 		if err != nil {
-			err = errors.New("向上移动ppt出错:" + err.Error())
+			err = errors.New("获取最小排序失败:" + err.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 {
@@ -962,6 +1063,15 @@ func CopyPpt(pptId int, groupId int64, adminId int, adminRealName string) (resp
 		err = errors.New("复制目录里的ppt出错:" + err.Error())
 		return
 	}
+
+	// 获取当前目录下最大的排序
+	pptSort, err := models.GetMaxSortByGroupId(groupId)
+	if err != nil {
+		err = errors.New("查询最大排序出错:" + err.Error())
+		return
+	}
+	newSort, _ := decimal.NewFromFloat(pptSort).Add(decimal.NewFromInt(1)).Float64()
+
 	var newMappings []*models.PptV2GroupMapping
 	newGroupPpt := &models.PptV2GroupMapping{
 		GroupId:       groupId,
@@ -970,7 +1080,7 @@ func CopyPpt(pptId int, groupId int64, adminId int, adminRealName string) (resp
 		ModifyTime:    time.Now(),
 		AdminId:       adminId,
 		AdminRealName: adminRealName,
-		PptSort:       0,
+		PptSort:       newSort,
 	}
 	newMappings = append(newMappings, newGroupPpt)
 
@@ -1068,136 +1178,6 @@ func SearchGroupPpt(keyWord string) (ret models.RespSearchGroupPptList, err erro
 	return
 }
 
-// InitPptGroup 初始化目录分组
-func InitPptGroup() (err error) {
-	//查询所有的ppt
-	now := time.Now()
-	pptList, err := models.GetPptV2ByCondition("", []interface{}{})
-	if err != nil {
-		errors.New("查询所有的ppt出错" + err.Error())
-		return
-	}
-	pptAdminMap := make(map[int]string, 0)
-	adminPptListMap := make(map[int][]*models.PptV2)
-	oldPptAdminMap := make(map[int]string, 0)
-	oldAdminPptListMap := make(map[int][]*models.PptV2)
-	//查询所有的ppt作者
-	for _, v := range pptList {
-		if v.PptVersion == 2 {
-			if _, ok := pptAdminMap[v.AdminId]; !ok {
-				pptAdminMap[v.AdminId] = v.AdminRealName
-			}
-			adminPptListMap[v.AdminId] = append(adminPptListMap[v.AdminId], v)
-		} else {
-			if _, ok := oldPptAdminMap[v.AdminId]; !ok {
-				oldPptAdminMap[v.AdminId] = v.AdminRealName
-			}
-			oldAdminPptListMap[v.AdminId] = append(oldAdminPptListMap[v.AdminId], v)
-		}
-	}
-	//批量生成历史目录,共享目录
-	newOldGroupList := make([]*models.PptV2Group, 0)
-	//批量生成目录,共享目录
-	newGroupList := make([]*models.PptV2Group, 0)
-	if len(pptAdminMap) > 0 {
-		for k, v := range pptAdminMap {
-			tmp := &models.PptV2Group{
-				GroupName:  v + "的PPT",
-				AdminId:    k,
-				IsShare:    1,
-				CreateTime: now,
-				ModifyTime: now,
-				ShareTime:  now,
-			}
-			newGroupList = append(newGroupList, tmp)
-		}
-		//批量把对应的ppt放到目录当中
-		err = models.AddPptGroupMulti(newGroupList)
-		if err != nil {
-			err = errors.New("创建目录出错:" + err.Error())
-			return
-		}
-	}
-	if len(oldPptAdminMap) > 0 {
-		for k, v := range oldPptAdminMap {
-			tmp := &models.PptV2Group{
-				GroupName:  v + "的历史PPT",
-				AdminId:    k,
-				IsShare:    1,
-				CreateTime: now,
-				ModifyTime: now,
-				ShareTime:  now,
-			}
-			newOldGroupList = append(newOldGroupList, tmp)
-		}
-		//批量把对应的ppt放到目录当中
-		err = models.AddPptGroupMulti(newOldGroupList)
-		if err != nil {
-			err = errors.New("创建目录出错:" + err.Error())
-			return
-		}
-	}
-	//批量更新排序字段
-	var newGroupIds []int64
-	var newMappings []*models.PptV2GroupMapping
-	for _, v := range newGroupList {
-		newGroupIds = append(newGroupIds, v.GroupId)
-		if ppts, ok := adminPptListMap[v.AdminId]; ok {
-			for _, p := range ppts {
-				tmp := &models.PptV2GroupMapping{
-					GroupId:       v.GroupId,
-					PptId:         int64(p.PptId),
-					CreateTime:    now,
-					ModifyTime:    now,
-					AdminId:       p.AdminId,
-					AdminRealName: p.AdminRealName,
-					PptSort:       0,
-				}
-				newMappings = append(newMappings, tmp)
-			}
-		}
-	}
-	for _, v := range newOldGroupList {
-		newGroupIds = append(newGroupIds, v.GroupId)
-		if oldPpts, ok1 := oldAdminPptListMap[v.AdminId]; ok1 {
-			for _, p := range oldPpts {
-				tmp := &models.PptV2GroupMapping{
-					GroupId:       v.GroupId,
-					PptId:         int64(p.PptId),
-					CreateTime:    now,
-					ModifyTime:    now,
-					AdminId:       p.AdminId,
-					AdminRealName: p.AdminRealName,
-					PptSort:       0,
-				}
-				newMappings = append(newMappings, tmp)
-			}
-		}
-	}
-	//err = models.UpdatePptGroupSortMulti(newGroupIds)
-	//if err != nil {
-	//	err = errors.New("更新目录排序标识出错:" + err.Error())
-	//	return
-	//}
-
-	err = models.AddPptGroupMappingMulti(newMappings)
-	if err != nil {
-		err = errors.New("创建目录里的ppt出错:" + err.Error())
-		return
-	}
-	//批量更新排序字段
-	var newGroupPptIds []int64
-	for _, v := range newMappings {
-		newGroupPptIds = append(newGroupPptIds, v.GroupPptId)
-	}
-	err = models.UpdatePptGroupMappingSortMulti(newGroupPptIds)
-	if err != nil {
-		err = errors.New("更新排序标识出错:" + err.Error())
-		return
-	}
-	return
-}
-
 // GetGroupsByAdminIdV2 查询ppt目录列表
 // @Author roc
 // @Time 2022-08-29 15:22:20