145 lines
3.9 KiB
Go
145 lines
3.9 KiB
Go
package dao
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strconv"
|
|
|
|
"go-common/app/common/openplatform/random"
|
|
item "go-common/app/service/openplatform/ticket-item/api/grpc/v1"
|
|
"go-common/app/service/openplatform/ticket-item/model"
|
|
"go-common/library/database/elastic"
|
|
"go-common/library/ecode"
|
|
"go-common/library/log"
|
|
)
|
|
|
|
// AddGuest 添加新嘉宾
|
|
func (d *Dao) AddGuest(c context.Context, info *item.GuestInfoRequest) (ret bool, err error) {
|
|
// 此处guest_id调用订单号生成器
|
|
guestID := random.Uniqid(19)
|
|
|
|
// 插入新数据
|
|
if dbErr := d.db.Create(&model.Guest{
|
|
Name: info.Name,
|
|
GuestImg: info.GuestImg,
|
|
Description: info.Description,
|
|
GuestID: guestID,
|
|
}).Error; dbErr != nil {
|
|
log.Error("insertion failed")
|
|
return false, ecode.NothingFound
|
|
}
|
|
|
|
return true, nil
|
|
}
|
|
|
|
// UpdateGuest 编辑嘉宾信息
|
|
func (d *Dao) UpdateGuest(c context.Context, info *item.GuestInfoRequest) (res bool, err error) {
|
|
// find original guest with id
|
|
var oriGuest model.Guest
|
|
|
|
if dbErr := d.db.First(&oriGuest, info.ID).Error; dbErr != nil {
|
|
log.Error("guest(%d) not found", info.ID)
|
|
return false, ecode.NothingFound
|
|
}
|
|
|
|
// update guest with new info (using map can update the column with empty string)
|
|
updateErr := d.db.Model(&oriGuest).Updates(
|
|
map[string]interface{}{
|
|
"name": info.Name,
|
|
"guest_img": info.GuestImg,
|
|
"description": info.Description,
|
|
}).Error
|
|
if updateErr != nil {
|
|
log.Error("UPDATE FAILED")
|
|
return false, ecode.NotModified
|
|
}
|
|
|
|
return true, nil
|
|
|
|
}
|
|
|
|
// GuestStatus 更新嘉宾状态
|
|
func (d *Dao) GuestStatus(c context.Context, id int64, status int8) (res bool, err error) {
|
|
// find original guest with id
|
|
var oriGuest model.Guest
|
|
|
|
if dbErr := d.db.First(&oriGuest, id).Error; dbErr != nil {
|
|
log.Error("guest (%d) not found", id)
|
|
return false, ecode.NothingFound
|
|
}
|
|
|
|
// update guest with new info (using map can update the column with empty string)
|
|
updateErr := d.db.Model(&oriGuest).Update("status", status).Error
|
|
if updateErr != nil {
|
|
log.Error("CHANGE STATUS FAILED")
|
|
return false, ecode.NotModified
|
|
}
|
|
|
|
return true, nil
|
|
}
|
|
|
|
// GetGuests 获取项目下所有嘉宾
|
|
func (d *Dao) GetGuests(c context.Context, pid int64) (res []*model.Guest, err error) {
|
|
// 获取项目下所有guestID
|
|
var projectGuests []*model.ProjectGuest
|
|
if dbErr := d.db.Select("guest_id").Order("position").Where("project_id = ? and delete_status = 0", pid).Find(&projectGuests).Error; dbErr != nil {
|
|
log.Error("获取项目嘉宾id失败: %s", dbErr)
|
|
err = ecode.NothingFound
|
|
return
|
|
}
|
|
|
|
var guestIDs []int64
|
|
for idx := range projectGuests {
|
|
guestIDs = append(guestIDs, projectGuests[idx].GuestID)
|
|
}
|
|
|
|
// 获取未禁用嘉宾信息 并用id当键值组成map
|
|
var guestInfo []*model.Guest
|
|
if dbErr := d.db.Where("status = 1 and id in (?)", guestIDs).Find(&guestInfo).Error; dbErr != nil {
|
|
log.Error("获取项目嘉宾信息失败: %s", dbErr)
|
|
err = ecode.NothingFound
|
|
return
|
|
}
|
|
|
|
guestInfoMap := make(map[int64]*model.Guest)
|
|
for _, value := range guestInfo {
|
|
guestInfoMap[value.ID] = value
|
|
}
|
|
|
|
// 根据guestIDs重新排序嘉宾信息
|
|
for _, value := range guestIDs {
|
|
if guestInfoMap[value].Status == 1 {
|
|
res = append(res, guestInfoMap[value])
|
|
}
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
// GuestSearch guest es search.
|
|
func (d *Dao) GuestSearch(c context.Context, arg *model.GuestSearchParam) (guests *model.GuestSearchList, err error) {
|
|
r := d.es.NewRequest("ticket_guest").
|
|
Index("ticket_guest").
|
|
Order("ctime", elastic.OrderDesc).
|
|
Order("id", elastic.OrderAsc).
|
|
Ps(arg.Ps).Pn(arg.Pn)
|
|
|
|
if arg.Keyword != "" {
|
|
if id, err1 := strconv.Atoi(arg.Keyword); err1 == nil {
|
|
r = r.WhereEq("id", id)
|
|
} else {
|
|
r = r.WhereLike([]string{"name"}, []string{arg.Keyword}, true, elastic.LikeLevelLow)
|
|
}
|
|
}
|
|
log.Info(fmt.Sprintf("%s/x/admin/search/query?%s", d.c.URL.ElasticHost, r.Params()))
|
|
|
|
guests = new(model.GuestSearchList)
|
|
err = r.Scan(c, guests)
|
|
if err != nil {
|
|
log.Error("GuestSearch() Scan() error(%v)", err)
|
|
}
|
|
|
|
return
|
|
}
|