123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- package asterisk
- import (
- "errors"
- "fmt"
- "net/http"
- "pbx-api-gin/api/model"
- "pbx-api-gin/internal/app/ami/action"
- amiModel "pbx-api-gin/internal/app/ami/model"
- "pbx-api-gin/internal/app/mysql"
- "pbx-api-gin/pkg/lfshook"
- "strings"
- "github.com/gin-gonic/gin"
- "github.com/mitchellh/mapstructure"
- )
- // @tags Asterisk-MeetMe
- // @Summary 查看所有会议室
- // @Description 会议室列表
- // @Security ApiKeyAuth
- // @Accept json
- // @Produce json
- // @Success 200 {object} model.APIOK "请求成功"
- // @Router /ginapi/plugin-asterisk/meetme/list [get]
- func listMeetMe(ctx *gin.Context) {
- amiRooms, _ := action.ListRoomMeetMe(make(map[string]string))
- var meets []model.MeetMe
- if err := mysql.DBOrmInstance.Find(&meets); err != nil {
- lfshook.NewLogger().Errorf("db index error %+v", err)
- ctx.JSON(http.StatusInternalServerError, model.APIError{ErrorMessage: "db error"})
- return
- }
- numRoomMap := make(map[string]*amiModel.MeetMeListRooms)
- for _, room := range amiRooms {
- numRoomMap[room.Conference] = room
- }
- rooms := make([]*model.MeetMeRoom, 0)
- for _, meet := range meets {
- room := &model.MeetMeRoom{
- MeetMe: meet,
- }
- if data, has := numRoomMap[meet.Conference]; has {
- mapstructure.Decode(data, room)
- }
- rooms = append(rooms, room)
- }
- ctx.JSON(http.StatusOK, model.APIOK{Message: "ok", Data: rooms})
- }
- // @tags Asterisk-MeetMe
- // @Summary 查看指定会议室
- // @Description 会议室信息
- // @Security ApiKeyAuth
- // @Accept json
- // @Produce json
- // @Param conference query string true "会议室号"
- // @Success 200 {object} model.APIOK "请求成功"
- // @Router /ginapi/plugin-asterisk/meetme/room [get]
- func room(ctx *gin.Context) {
- conference := ctx.Query("conference")
- if conference == "" {
- ctx.JSON(http.StatusBadRequest, model.APIError{ErrorMessage: errors.New("conference is empty").Error()})
- return
- }
- items, err := action.ListMeetMe(conference)
- if err != nil {
- lfshook.NewLogger().Warn(err)
- }
- // 查询 room 信息
- var roomInfo *amiModel.MeetMeListRooms
- amiRooms, _ := action.ListRoomMeetMe(make(map[string]string))
- for _, room := range amiRooms {
- if room.Conference == conference {
- roomInfo = room
- break
- }
- }
- meet := model.MeetMe{Conference: conference}
- if _, err := mysql.DBOrmInstance.Get(&meet); err != nil {
- lfshook.NewLogger().Errorf("db get error %+v", err)
- ctx.JSON(http.StatusInternalServerError, model.APIError{ErrorMessage: "db error"})
- return
- }
- room := &model.MeetMeRoom{
- MeetMe: meet,
- }
- mapstructure.Decode(roomInfo, room)
- ctx.JSON(http.StatusOK, model.APIOK{Message: "ok", Data: gin.H{"items": items, "room": room}})
- }
- // @tags Asterisk-MeetMe
- // @Summary 邀请会议
- // @Description 邀请会议
- // @Security ApiKeyAuth
- // @Accept json
- // @Produce json
- // @Param data body model.MeetMeInviteVO true "加入会议参数"
- // @Success 200 {object} model.APIOK "请求成功"
- // @Router /ginapi/plugin-asterisk/meetme/invite [post]
- func inviteMeetMe(ctx *gin.Context) {
- var data model.MeetMeInviteVO
- if err := ctx.ShouldBindJSON(&data); err != nil {
- ctx.JSON(http.StatusBadRequest, model.APIError{ErrorMessage: err.Error()})
- return
- }
- // 根据参数确定主叫, 再考虑用户登录的分机信息
- myExtension := ""
- if myExtension == "" {
- ID, _ := ctx.Get("ID")
- myExtension = "=================="
- if myExtension == "" {
- ctx.JSON(http.StatusBadRequest, model.APIError{ErrorMessage: fmt.Sprintf("not found user extension by ID %d", ID)})
- return
- }
- }
- dialplan := "default"
- action.IviteMeetMe(data.Meetme, strings.Join(data.Extensions, ","), dialplan, myExtension)
- ctx.JSON(http.StatusOK, model.APIOK{Message: "ok", Data: data})
- }
- // @tags Asterisk-MeetMe
- // @Summary 踢出会议
- // @Description 踢出会议
- // @Security ApiKeyAuth
- // @Accept json
- // @Produce json
- // @Param data body model.MeetMeVO true "参数"
- // @Success 200 {object} model.APIOK "请求成功"
- // @Router /ginapi/plugin-asterisk/meetme/kick [post]
- func kickMeetMe(ctx *gin.Context) {
- var data model.MeetMeVO
- if err := ctx.ShouldBindJSON(&data); err != nil {
- ctx.JSON(http.StatusBadRequest, model.APIError{ErrorMessage: err.Error()})
- return
- }
- err := action.KickMeetMe(data.Meetme, strings.Join(data.UserNum, ","))
- if err != nil {
- ctx.JSON(http.StatusInternalServerError, model.APIError{ErrorMessage: err.Error()})
- return
- }
- ctx.JSON(http.StatusOK, model.APIOK{Message: "ok", Data: data})
- }
- // @tags Asterisk-MeetMe
- // @Summary 禁言
- // @Description 禁言
- // @Security ApiKeyAuth
- // @Accept json
- // @Produce json
- // @Param data body model.MeetMeVO true "参数"
- // @Success 200 {object} model.APIOK "请求成功"
- // @Router /ginapi/plugin-asterisk/meetme/mute [post]
- func muteMeetMe(ctx *gin.Context) {
- var data model.MeetMeVO
- if err := ctx.ShouldBindJSON(&data); err != nil {
- ctx.JSON(http.StatusBadRequest, model.APIError{ErrorMessage: err.Error()})
- return
- }
- var hasError bool
- for _, number := range data.UserNum {
- _, err := action.MuteMeetMe(data.Meetme, number)
- if err != nil {
- lfshook.NewLogger().Error(err)
- hasError = true
- }
- }
- if hasError {
- ctx.JSON(http.StatusInternalServerError, model.APIError{ErrorMessage: "check error.log"})
- return
- }
- ctx.JSON(http.StatusOK, model.APIOK{Message: "ok", Data: ""})
- }
- // @tags Asterisk-MeetMe
- // @Summary 取消禁言
- // @Description 取消禁言
- // @Security ApiKeyAuth
- // @Accept json
- // @Produce json
- // @Param data body model.MeetMeVO true "参数"
- // @Success 200 {object} model.APIOK "请求成功"
- // @Router /ginapi/plugin-asterisk/meetme/unmute [post]
- func unMuteMeetMe(ctx *gin.Context) {
- var data model.MeetMeVO
- if err := ctx.ShouldBindJSON(&data); err != nil {
- ctx.JSON(http.StatusBadRequest, model.APIError{ErrorMessage: err.Error()})
- return
- }
- var hasError bool
- for _, number := range data.UserNum {
- _, err := action.UnMuteMeetMe(data.Meetme, number)
- if err != nil {
- lfshook.NewLogger().Error(err)
- hasError = true
- }
- }
- if hasError {
- ctx.JSON(http.StatusInternalServerError, model.APIError{ErrorMessage: "check error.log"})
- return
- }
- ctx.JSON(http.StatusOK, model.APIOK{Message: "ok", Data: "mute ok"})
- }
- // @tags Asterisk-MeetMe
- // @Summary 开启锁定
- // @Description 开启锁定
- // @Security ApiKeyAuth
- // @Accept json
- // @Produce json
- // @Param data body model.MeetMeCommonVO true "参数"
- // @Success 200 {object} model.APIOK "请求成功"
- // @Router /ginapi/plugin-asterisk/meetme/lock [post]
- func lockMeetMe(ctx *gin.Context) {
- var data model.MeetMeCommonVO
- if err := ctx.ShouldBindJSON(&data); err != nil {
- ctx.JSON(http.StatusBadRequest, model.APIError{ErrorMessage: err.Error()})
- return
- }
- action.LockMeetMe(data.Meetme)
- ctx.JSON(http.StatusOK, model.APIOK{Message: "ok", Data: data})
- }
- // @tags Asterisk-MeetMe
- // @Summary 关闭锁定
- // @Description 关闭锁定
- // @Security ApiKeyAuth
- // @Accept json
- // @Produce json
- // @Param data body model.MeetMeCommonVO true "参数"
- // @Success 200 {object} model.APIOK "请求成功"
- // @Router /ginapi/plugin-asterisk/meetme/unlock [post]
- func unLockMeetMe(ctx *gin.Context) {
- var data model.MeetMeCommonVO
- if err := ctx.ShouldBindJSON(&data); err != nil {
- ctx.JSON(http.StatusBadRequest, model.APIError{ErrorMessage: err.Error()})
- return
- }
- action.UnLockMeetMe(data.Meetme)
- ctx.JSON(http.StatusOK, model.APIOK{Message: "ok", Data: data})
- }
- // @tags Asterisk-MeetMe
- // @Summary 关闭会议
- // @Description 关闭会议
- // @Security ApiKeyAuth
- // @Accept json
- // @Produce json
- // @Param data body model.MeetMeCommonVO true "参数"
- // @Success 200 {object} model.APIOK "请求成功"
- // @Router /ginapi/plugin-asterisk/meetme/end [post]
- func endMeetMe(ctx *gin.Context) {
- var data model.MeetMeCommonVO
- if err := ctx.ShouldBindJSON(&data); err != nil {
- ctx.JSON(http.StatusBadRequest, model.APIError{ErrorMessage: err.Error()})
- return
- }
- action.EndMeetMe(data.Meetme)
- ctx.JSON(http.StatusOK, model.APIOK{Message: "ok", Data: data})
- }
|