conference.go 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. package handler
  2. import (
  3. "city_chips/internal/model"
  4. "city_chips/internal/service"
  5. "city_chips/pkg/helper/resp"
  6. "encoding/json"
  7. "fmt"
  8. "github.com/gin-gonic/gin"
  9. "github.com/spf13/viper"
  10. "github.com/tidwall/gjson"
  11. "net/http"
  12. "time"
  13. )
  14. type ConferenceHandler struct {
  15. *Handler
  16. conferenceService service.ConferenceService
  17. conf *viper.Viper
  18. }
  19. func NewConferenceHandler(handler *Handler, conferenceService service.ConferenceService, conf *viper.Viper) *ConferenceHandler {
  20. return &ConferenceHandler{
  21. Handler: handler,
  22. conferenceService: conferenceService,
  23. conf: conf,
  24. }
  25. }
  26. // RoomOps 会议室运维概览统计数据
  27. func (h *ConferenceHandler) RoomOps(ctx *gin.Context) {
  28. roomOpsurl := h.conf.GetString("conference.baseurl") + h.conf.GetString("conference.roomOps")
  29. request, err := h.conferenceService.SendRequest(http.DefaultClient, "GET", roomOpsurl, nil)
  30. if err != nil {
  31. resp.HandleError(ctx, 1203, "获取会议概要失败", nil)
  32. return
  33. }
  34. if gjson.Get(string(request), "code").Int() == 0 {
  35. s := gjson.Get(string(request), "data").String()
  36. resp.HandleSuccess(ctx, s)
  37. return
  38. }
  39. resp.HandleError(ctx, 1203, "获取会议概要失败", nil)
  40. }
  41. // DataAnalysis 数据大屏
  42. func (h *ConferenceHandler) DataAnalysis(ctx *gin.Context) {
  43. dataAnalysisurl := h.conf.GetString("conference.baseurl") + h.conf.GetString("conference.dataAnalysis")
  44. meetingRoomStatus := h.conf.GetString("conference.baseurl") + h.conf.GetString("conference.meetingRoomStatus")
  45. request, err := h.conferenceService.SendRequest(http.DefaultClient, "GET", dataAnalysisurl, nil)
  46. meetingRoomrequest, err := h.conferenceService.SendRequest(http.DefaultClient, "GET", meetingRoomStatus, nil)
  47. if err != nil {
  48. resp.HandleError(ctx, 1203, "获取数据大屏信息失败", nil)
  49. return
  50. }
  51. var bigdata model.BigData
  52. if gjson.Get(string(request), "code").Int() == 0 && gjson.Get(string(meetingRoomrequest), "code").Int() == 0 {
  53. err = json.Unmarshal(request, &bigdata)
  54. if err != nil {
  55. h.logger.Error("json序列化失败")
  56. resp.HandleError(ctx, 1203, "json序列化失败", nil)
  57. return
  58. }
  59. meetingRoomFreeCount := gjson.Get(string(meetingRoomrequest), "data.meetingRoomFreeCount").Int()
  60. meetingRoomOccupiedCount := gjson.Get(string(meetingRoomrequest), "data.meetingRoomOccupiedCount").Int()
  61. meetingRoomForbiddenCount := gjson.Get(string(meetingRoomrequest), "data.meetingRoomForbiddenCount").Int()
  62. bigdata.Data.MeetingRoomFreeCount = meetingRoomFreeCount
  63. bigdata.Data.MeetingRoomForbiddenCount = meetingRoomForbiddenCount
  64. bigdata.Data.MeetingRoomOccupiedCount = meetingRoomOccupiedCount
  65. resp.HandleSuccess(ctx, bigdata.Data)
  66. return
  67. }
  68. resp.HandleError(ctx, 1203, "获取数据大屏信息失败", nil)
  69. }
  70. // GetRoomsByLocationId 获取会议室数据
  71. func (h *ConferenceHandler) GetRoomsByLocationId(ctx *gin.Context) {
  72. // 设置响应头
  73. ctx.Header("Content-Type", "text/event-stream")
  74. ctx.Header("Cache-Control", "no-cache")
  75. ctx.Header("Connection", "keep-alive")
  76. // 监听客户端断开连接
  77. conn := true
  78. notify := ctx.Writer.CloseNotify()
  79. type Response struct {
  80. RequestId string `protobuf:"bytes,1,opt,name=requestId,proto3" json:"requestId,omitempty"`
  81. Code int32 `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"`
  82. Msg string `protobuf:"bytes,3,opt,name=msg,proto3" json:"msg,omitempty"`
  83. Data any `json:"data"`
  84. }
  85. getRoomsByLocationId := h.conf.GetString("conference.baseurl") + h.conf.GetString("conference.getRoomsByLocationId")
  86. now := time.Now().Format("2006-01-02")
  87. m := make(map[string]any)
  88. m["date"] = now
  89. m["appoint_time"] = ""
  90. m["search"] = ""
  91. m["locationId"] = []int{}
  92. m["capacity"] = []string{}
  93. m["deviceType"] = []string{}
  94. m["roomType"] = []int{}
  95. m["status"] = ""
  96. m["page"] = 1
  97. m["page_size"] = h.conf.GetInt("conference.pageSize")
  98. var response Response
  99. for conn {
  100. select {
  101. case <-notify:
  102. conn = false
  103. fmt.Println("断开连接")
  104. return
  105. default:
  106. request, err := h.conferenceService.SendRequest(http.DefaultClient, "POST", getRoomsByLocationId, m)
  107. if err != nil {
  108. resp.HandleError(ctx, 1203, "获取会议室数据失败", err)
  109. return
  110. }
  111. var rooms model.Room
  112. var meetingRoomDetail []model.MeetingRoomDetail
  113. if gjson.Get(string(request), "code").Int() == 0 {
  114. err = json.Unmarshal(request, &rooms)
  115. if err != nil {
  116. h.logger.Error("json序列化失败")
  117. response.Code = 1203
  118. response.Msg = "获取会议室数据失败"
  119. response.Data = nil
  120. res, _ := json.Marshal(&response)
  121. fmt.Fprintf(ctx.Writer, "data: %s\n\n", string(res))
  122. ctx.Writer.Flush()
  123. return
  124. }
  125. for _, v := range rooms.Data.List {
  126. detail := model.MeetingRoomDetail{
  127. Id: v.Id,
  128. LocationId: v.LocationId,
  129. LocationName: v.LocationName,
  130. CompanyId: v.CompanyId,
  131. Status: v.Status,
  132. Usage: v.Usage,
  133. Name: v.Name,
  134. }
  135. meetingRoomDetail = append(meetingRoomDetail, detail)
  136. }
  137. } else {
  138. response.Code = 1203
  139. response.Msg = "获取会议室数据失败"
  140. response.Data = string(request)
  141. res, _ := json.Marshal(&response)
  142. fmt.Fprintf(ctx.Writer, "data: %s\n\n", string(res))
  143. ctx.Writer.Flush()
  144. return
  145. }
  146. response.Code = 200
  147. response.Msg = "查询成功"
  148. response.Data = meetingRoomDetail
  149. res, _ := json.Marshal(&response)
  150. fmt.Fprintf(ctx.Writer, "data: %s\n\n", string(res))
  151. ctx.Writer.Flush()
  152. time.Sleep(10 * time.Second)
  153. }
  154. }
  155. }
  156. // MeetingRoomById 会议室详情
  157. func (h *ConferenceHandler) MeetingRoomById(ctx *gin.Context) {
  158. id := ctx.Query("id")
  159. if len(id) <= 0 {
  160. resp.HandleError(ctx, 1203, "缺少必要参数id", nil)
  161. return
  162. }
  163. dataAnalysisurl := h.conf.GetString("conference.baseurl") + h.conf.GetString("conference.meetingRoom") + "/" + id
  164. request, err := h.conferenceService.SendRequest(http.DefaultClient, "GET", dataAnalysisurl, nil)
  165. if err != nil {
  166. resp.HandleError(ctx, 1203, "获取会议室详情失败", err)
  167. return
  168. }
  169. if gjson.Get(string(request), "code").Int() == 0 {
  170. s := gjson.Get(string(request), "data").Value()
  171. resp.HandleSuccess(ctx, s)
  172. return
  173. }
  174. resp.HandleError(ctx, 1203, "获取会议室详情失败", string(request))
  175. }
  176. // Location 地点详情
  177. func (h *ConferenceHandler) Location(ctx *gin.Context) {
  178. id := ctx.Query("id")
  179. if len(id) <= 0 {
  180. resp.HandleError(ctx, 1203, "缺少必要参数id", nil)
  181. return
  182. }
  183. dataAnalysisurl := h.conf.GetString("conference.baseurl") + h.conf.GetString("conference.location") + "/" + id
  184. request, err := h.conferenceService.SendRequest(http.DefaultClient, "GET", dataAnalysisurl, nil)
  185. if err != nil {
  186. resp.HandleError(ctx, 1203, "获取地点详情失败", err)
  187. return
  188. }
  189. if gjson.Get(string(request), "code").Int() == 0 {
  190. s := gjson.Get(string(request), "data").Value()
  191. resp.HandleSuccess(ctx, s)
  192. return
  193. }
  194. resp.HandleError(ctx, 1203, "获取地点详情失败", string(request))
  195. }
  196. // GetRoomsByLocation 查询会议室数据
  197. func (h *ConferenceHandler) GetRoomsByLocation(ctx *gin.Context) {
  198. getRoomsByLocation := h.conf.GetString("conference.baseurl") + h.conf.GetString("conference.getRoomsByLocationId")
  199. var respGetRooms model.RespGetRooms
  200. err := ctx.ShouldBindJSON(&respGetRooms)
  201. if err != nil {
  202. resp.HandleError(ctx, 1203, "json序列化失败", nil)
  203. return
  204. }
  205. _, err = time.Parse("2006-01-02", respGetRooms.Date)
  206. if err != nil {
  207. resp.HandleError(ctx, 1203, "时间格式错误", nil)
  208. return
  209. }
  210. request, err := h.conferenceService.SendRequest(http.DefaultClient, "POST", getRoomsByLocation, respGetRooms)
  211. if err != nil {
  212. resp.HandleError(ctx, 1203, "获取会议室列表失败", err)
  213. return
  214. }
  215. if gjson.Get(string(request), "code").Int() == 0 {
  216. s := gjson.Get(string(request), "data").Value()
  217. resp.HandleSuccess(ctx, s)
  218. return
  219. }
  220. resp.HandleError(ctx, 1203, "获取会议室列表失败", string(request))
  221. }