You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

245 lines
5.7 KiB

9 months ago
package service
import (
"errors"
"fmt"
"github.com/gin-gonic/gin"
"pure-admin/global"
"pure-admin/model"
"pure-admin/model/request"
"pure-admin/model/response"
"strconv"
)
func AddBanner(q request.CreateBanner, userId string) error {
var (
err error
data *model.Banner
total int64
)
//查询数量限制
global.MG_DB.Model(&model.Banner{}).Where("status = ?", "1").Count(&total)
if total >= model.MAX_BANNER_LIMIT {
return errors.New(fmt.Sprintf("最多可新建%d条banner", model.MAX_BANNER_LIMIT))
}
data = &model.Banner{
Title: q.Title,
CoverUrl: q.CoverUrl,
LinkType: q.LinkType,
Status: q.Status,
CreateBy: userId,
UpdateBy: userId,
}
if q.LinkType == "1" {
data.Link = q.Link
} else {
data.Type = q.Type
if q.Type == "0101" {
//查询任务
data.RelationId = q.RelationId
data.RelationType = q.RelationType
}
}
_, maxSort := GetBannerMaxSort()
data.Sort = int(maxSort) + 1
data.ID = 0
err = data.New()
if err != nil {
return errors.New("创建banner失败")
}
return nil
}
func UpdateBanner(q request.UpdateBanner, uuid string) error {
var (
err error
check model.Banner
updateMap map[string]interface{}
)
err = global.MG_DB.Model(&model.Banner{}).Where("id = ?", q.ID).First(&check).Error
if err != nil {
return errors.New("数据不存在")
}
updateMap = map[string]interface{}{
"title": q.Title,
"relation_id": q.RelationId,
"relation_type": q.RelationType,
"cover_url": q.CoverUrl,
"link_type": q.LinkType,
"link": q.Link,
"status": q.Status,
"type": q.Type,
"update_by": uuid,
}
err = global.MG_DB.Model(&model.Banner{}).Where("id = ?", q.ID).Updates(updateMap).Error
if err != nil {
return errors.New("修改失败")
}
return nil
}
func GetBannerMaxSort() (err error, total int64) {
db := global.MG_DB.Model(&model.Banner{}).Select("IFNULL(MAX(sort),0)")
err = db.Scan(&(total)).Error
return
}
func DeleteBannerByIds(ids request.IdsReq) (err error) {
err = global.MG_DB.Model(model.Banner{}).Where("id in (?)", ids.Ids).Unscoped().Delete(&model.Banner{}).Error
if err != nil {
return errors.New("删除失败")
}
return err
}
func BannerUpData(info request.IdReq, c *gin.Context) error {
var (
err error
idList []global.BASE_ID_SORT
)
err, idList = GetBannerSortList()
if err != nil {
return err
}
for i := 1; i < len(idList); i++ {
if idList[i].ID == info.ID {
sort := idList[i].Sort
idList[i].Sort = idList[i-1].Sort
var tmp = make([]global.BASE_ID_SORT, 0)
tmp = append(tmp, global.BASE_ID_SORT{ID: idList[i].ID, Sort: idList[i].Sort})
tmp = append(tmp, global.BASE_ID_SORT{ID: idList[i-1].ID, Sort: sort})
err = updateBannerSort(tmp)
if err != nil {
return err
}
break
}
}
return err
}
func BannerDownData(info request.IdReq, c *gin.Context) error {
var (
err error
idList []global.BASE_ID_SORT
)
err, idList = GetBannerSortList()
if err != nil {
return err
}
for i := 0; i < len(idList); i++ {
if idList[i].ID == info.ID && i < len(idList)-1 {
sort := idList[i].Sort
idList[i].Sort = idList[i+1].Sort
var tmp = make([]global.BASE_ID_SORT, 0)
tmp = append(tmp, global.BASE_ID_SORT{ID: idList[i].ID, Sort: idList[i].Sort})
tmp = append(tmp, global.BASE_ID_SORT{ID: idList[i+1].ID, Sort: sort})
err = updateBannerSort(tmp)
if err != nil {
return err
}
break
}
}
return err
}
func GetBannerSortList() (err error, list []global.BASE_ID_SORT) {
db := global.MG_DB.Model(&model.Banner{})
var idList []global.BASE_ID_SORT
err = db.Select("id,sort").Order("sort desc").Find(&idList).Error
return err, idList
}
func updateBannerSort(idList []global.BASE_ID_SORT) error {
var err error
for _, val := range idList {
_ = UpdateBannerSort(val)
//_ = global.MG_DB.Model(&model.MissionRecommend{}).Where("id=?", val.ID).Update("sort", val.Sort).Error
}
return err
}
func UpdateBannerSort(val global.BASE_ID_SORT) error {
var err error
_ = global.MG_DB.Model(&model.Banner{}).Where("id=?", val.ID).Update("sort", val.Sort).Error
return err
}
func GetBannerList(info request.SearchBanner) (err error, list []response.BannerListResponse, total int64) {
limit := info.PageSize
offset := info.PageSize * (info.Page - 1)
db := global.MG_DB.Model(&model.Banner{})
if info.Title != "" {
db = db.Where("title LIKE ?", "%"+info.Title+"%")
}
if info.Status != "" {
db = db.Where("status = ?", info.Status)
}
err = db.Count(&total).Error
var res []model.Banner
var relationIds []int
var relationMission []model.Mission
err = db.Select("id,title,cover_url,relation_id,relation_type,link_type,link,type,status,sort").
Order("sort DESC").Limit(limit).Offset(offset).Find(&res).Error
if err != nil {
return err, nil, 0
}
for i := 0; i < len(res); i++ {
if res[i].LinkType == "0" && res[i].Type == "0101" && res[i].RelationId != "" {
rid, _ := strconv.Atoi(res[i].RelationId)
relationIds = append(relationIds, rid)
}
}
if len(relationIds) > 0 {
global.MG_DB.Model(&model.Mission{}).Select("id,title").Where("id in (?)", relationIds).Find(&relationMission)
}
for i := 0; i < len(res); i++ {
//精简字段赋值
vRes := response.BannerListResponse{
RelationId: res[i].RelationId,
RelationType: res[i].RelationType,
Title: res[i].Title,
CoverUrl: res[i].CoverUrl,
LinkType: res[i].LinkType,
Link: res[i].Link,
Type: res[i].Type,
Status: res[i].Status,
}
if len(relationMission) > 0 {
for _, r := range relationMission {
mid := strconv.Itoa(int(r.ID))
if mid == res[i].RelationId {
vRes.RelationTitle = r.Title
}
}
}
vRes.ID = res[i].ID
vRes.SortIndex = offset + i + 1
list = append(list, vRes)
}
return err, list, total
}