|
@@ -0,0 +1,267 @@
|
|
|
+package comein
|
|
|
+
|
|
|
+import (
|
|
|
+ "encoding/json"
|
|
|
+ "errors"
|
|
|
+ "fmt"
|
|
|
+ "hongze/hongze_task/services/alarm_msg"
|
|
|
+ "hongze/hongze_task/utils"
|
|
|
+ "io/ioutil"
|
|
|
+ "net/http"
|
|
|
+ "net/url"
|
|
|
+ "sort"
|
|
|
+ "strconv"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+// EventListResp 会议列表返回数据结构
|
|
|
+type EventListResp struct {
|
|
|
+ Code string `json:"code"`
|
|
|
+ Data []EventListDataResp `json:"data"`
|
|
|
+ Errorcode string `json:"errorcode"`
|
|
|
+ Errordesc string `json:"errordesc"`
|
|
|
+ Extra struct {
|
|
|
+ HasMore bool `json:"hasMore"`
|
|
|
+ More string `json:"more"`
|
|
|
+ Pagestart string `json:"pagestart"`
|
|
|
+ Total string `json:"total"`
|
|
|
+ } `json:"extra"`
|
|
|
+ Msg string `json:"msg"`
|
|
|
+ Total int64 `json:"total"`
|
|
|
+}
|
|
|
+
|
|
|
+// EventListDataResp 会议数据
|
|
|
+type EventListDataResp struct {
|
|
|
+ Authtag string `json:"authtag"`
|
|
|
+ ConferenceType int64 `json:"conferenceType"`
|
|
|
+ ContentTypeTagName string `json:"contentTypeTagName"`
|
|
|
+ DescURL string `json:"descUrl"`
|
|
|
+ Etime int64 `json:"etime"`
|
|
|
+ ID int64 `json:"id"`
|
|
|
+ IndustryName string `json:"industryName"`
|
|
|
+ IsDel int64 `json:"isDel"`
|
|
|
+ Livemode int64 `json:"livemode"`
|
|
|
+ Logo string `json:"logo"`
|
|
|
+ Logoweb string `json:"logoweb"`
|
|
|
+ Members []struct {
|
|
|
+ Identity int64 `json:"identity"`
|
|
|
+ PhoneNumber string `json:"phoneNumber"`
|
|
|
+ Type int64 `json:"type"`
|
|
|
+ Uname string `json:"uname"`
|
|
|
+ } `json:"members"`
|
|
|
+ PresentURL string `json:"presentUrl"`
|
|
|
+ RecordSupport int64 `json:"recordSupport"`
|
|
|
+ RoadshowID int64 `json:"roadshowId"`
|
|
|
+ ShortURL string `json:"shortUrl"`
|
|
|
+ Status string `json:"status"`
|
|
|
+ Stime int64 `json:"stime"`
|
|
|
+ Title string `json:"title"`
|
|
|
+ WxminiProgramID string `json:"wxminiProgramId"`
|
|
|
+ WxminiProgramPage string `json:"wxminiProgramPage"`
|
|
|
+}
|
|
|
+
|
|
|
+// GetEventList 获取会议列表
|
|
|
+func GetEventList(startTime, endTime time.Time) (respData EventListResp, err error) {
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ go alarm_msg.SendAlarmMsg("查询组织下所有的会议列表失败;ERR:"+err.Error(), 3)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ logMsg := ``
|
|
|
+ pageStart := 0
|
|
|
+ pageNum := 10
|
|
|
+ paramsMap := map[string]string{
|
|
|
+ "mod": "roadshow", //模块名
|
|
|
+ "act": "opensearch", //处理方法名
|
|
|
+ //"btime": fmt.Sprint(startTime.Unix() * 1000), //开始时间,时间戳
|
|
|
+ //"etime": fmt.Sprint(endTime.Unix() * 1000), //结束时间,时间戳
|
|
|
+ //"ignoredel": "1", //忽略已删除的数据 (1 删除的数据也可查询出)
|
|
|
+ "pagestart": strconv.Itoa(pageStart), //翻页数 (第一页传 0 )
|
|
|
+ "pagenum": strconv.Itoa(pageNum), //每页总条数(默认10条)
|
|
|
+ "ts": fmt.Sprint(time.Now().Unix() * 1000), //请求发起的时间戳,单位:毫秒
|
|
|
+ }
|
|
|
+ paramStr := GetUrlParams(paramsMap)
|
|
|
+ //fmt.Println(paramStr)
|
|
|
+
|
|
|
+ //App string `json:"app" description:"数据类型"`
|
|
|
+ //Mod string `json:"mod" description:"模块名"`
|
|
|
+ //Act string `json:"act" description:"处理方法名"`
|
|
|
+ //Appid string `json:"appid" description:"合作方ID"`
|
|
|
+
|
|
|
+ getUrl := utils.COMEIN_URL + "?" + paramStr
|
|
|
+
|
|
|
+ resp, err := http.Get(getUrl)
|
|
|
+ if err != nil {
|
|
|
+ logMsg = fmt.Sprint("comein get err; request:", getUrl, "; errMsg:", err.Error())
|
|
|
+ utils.FileLog.Info(logMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ defer resp.Body.Close()
|
|
|
+
|
|
|
+ body, err := ioutil.ReadAll(resp.Body)
|
|
|
+ if err != nil {
|
|
|
+ logMsg = fmt.Sprint("comein get err; request:", getUrl, "; errMsg:", err.Error())
|
|
|
+ utils.FileLog.Info(logMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ utils.FileLog.Info(fmt.Sprint("comein get Result", ";url:", getUrl, ";\nresponse:", string(body)))
|
|
|
+ err = json.Unmarshal(body, &respData)
|
|
|
+ if err != nil {
|
|
|
+ utils.FileLog.Info("comein get Err:", err.Error(), ";url:", getUrl, ";response:", string(body))
|
|
|
+ err = errors.New("Unmarshal Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if respData.Errorcode != "0" {
|
|
|
+ utils.FileLog.Info("comein get Err:", err.Error(), ";url:", getUrl, ";response:", string(body))
|
|
|
+ err = errors.New(respData.Errordesc)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// RoadshowDataResp 用户参会数据返回
|
|
|
+type RoadshowDataResp struct {
|
|
|
+ Code string `json:"code"`
|
|
|
+ Data []RoadshowData `json:"data"`
|
|
|
+ Errorcode string `json:"errorcode"`
|
|
|
+ Errordesc string `json:"errordesc"`
|
|
|
+ Msg string `json:"msg"`
|
|
|
+}
|
|
|
+
|
|
|
+type RoadshowData struct {
|
|
|
+ AreaCode string `json:"areaCode"`
|
|
|
+ AskCount int64 `json:"askCount"`
|
|
|
+ AuthInfo string `json:"authInfo"`
|
|
|
+ Company string `json:"company"`
|
|
|
+ DataType int64 `json:"dataType"`
|
|
|
+ DutySeller string `json:"dutySeller"`
|
|
|
+ Email string `json:"email"`
|
|
|
+ FirstWatchTime int64 `json:"firstWatchTime"`
|
|
|
+ GuestUserNames string `json:"guestUserNames"`
|
|
|
+ ID int64 `json:"id"`
|
|
|
+ JoinTime int64 `json:"joinTime"`
|
|
|
+ JoinType int64 `json:"joinType"`
|
|
|
+ LastWatchTime int64 `json:"lastWatchTime"`
|
|
|
+ MeetingType string `json:"meetingType"`
|
|
|
+ Occupation string `json:"occupation"`
|
|
|
+ OrgRemarks string `json:"orgRemarks"`
|
|
|
+ ResearchArea string `json:"researchArea"`
|
|
|
+ RoadshowBeginTime int64 `json:"roadshowBeginTime"`
|
|
|
+ RoadshowEndTime int64 `json:"roadshowEndTime"`
|
|
|
+ RoadshowID int64 `json:"roadshowId"`
|
|
|
+ RoadshowTitle string `json:"roadshowTitle"`
|
|
|
+ RoadshowType int64 `json:"roadshowType"`
|
|
|
+ SpeakerID int64 `json:"speakerId"`
|
|
|
+ SpeakerName string `json:"speakerName"`
|
|
|
+ TelFixedID int64 `json:"telFixedId"`
|
|
|
+ TeleconferenceID string `json:"teleconferenceId"`
|
|
|
+ ThirdMeetingID string `json:"thirdMeetingId"`
|
|
|
+ UniqueID string `json:"uniqueId"`
|
|
|
+ UserIdentity int64 `json:"userIdentity"`
|
|
|
+ UserInfoSource string `json:"userInfoSource"`
|
|
|
+ UserName string `json:"userName"`
|
|
|
+ UserPhone string `json:"userPhone"`
|
|
|
+}
|
|
|
+
|
|
|
+// GetRoadshowDataList 获取参会人员列表
|
|
|
+func GetRoadshowDataList(startTime, endTime int64) (respData RoadshowDataResp, err error) {
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ go alarm_msg.SendAlarmMsg("获取参会人员列表失败;ERR:"+err.Error(), 3)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ logMsg := ``
|
|
|
+ paramsMap := map[string]string{
|
|
|
+ "mod": "open", //模块名
|
|
|
+ "act": "roadshow-datas", //处理方法名
|
|
|
+ "beginTime": fmt.Sprint(startTime), //开始时间,时间戳
|
|
|
+ "endTime": fmt.Sprint(endTime), //结束时间,时间戳
|
|
|
+ "ts": fmt.Sprint(time.Now().Unix() * 1000), //请求发起的时间戳,单位:毫秒
|
|
|
+ }
|
|
|
+ paramStr := GetUrlParams(paramsMap)
|
|
|
+
|
|
|
+ paramsMap["dataType"] = "1" //数据类型,1:直播 2:回放 (该参数不参与签名算法)
|
|
|
+ //fmt.Println(paramStr)
|
|
|
+
|
|
|
+ //App string `json:"app" description:"数据类型"`
|
|
|
+ //Mod string `json:"mod" description:"模块名"`
|
|
|
+ //Act string `json:"act" description:"处理方法名"`
|
|
|
+ //Appid string `json:"appid" description:"合作方ID"`
|
|
|
+
|
|
|
+ getUrl := utils.COMEIN_URL + "?" + paramStr
|
|
|
+
|
|
|
+ resp, err := http.Get(getUrl)
|
|
|
+ if err != nil {
|
|
|
+ logMsg = fmt.Sprint("获取参会人员列表 comein get err; request:", getUrl, "; errMsg:", err.Error())
|
|
|
+ utils.FileLog.Info(logMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ defer resp.Body.Close()
|
|
|
+
|
|
|
+ body, err := ioutil.ReadAll(resp.Body)
|
|
|
+ if err != nil {
|
|
|
+ logMsg = fmt.Sprint("获取参会人员列表 comein get err; request:", getUrl, "; errMsg:", err.Error())
|
|
|
+ utils.FileLog.Info(logMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ utils.FileLog.Info(fmt.Sprint("获取参会人员列表 comein get Result", ";url:", getUrl, ";\nresponse:", string(body)))
|
|
|
+ err = json.Unmarshal(body, &respData)
|
|
|
+ if err != nil {
|
|
|
+ utils.FileLog.Info("获取参会人员列表 comein get Err:", err.Error(), ";url:", getUrl, ";response:", string(body))
|
|
|
+ err = errors.New("Unmarshal Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if respData.Errorcode != "0" {
|
|
|
+ utils.FileLog.Info("获取参会人员列表 comein get Err:", err.Error(), ";url:", getUrl, ";response:", string(body))
|
|
|
+ err = errors.New(respData.Errordesc)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// GetUrlParams 获取url请求参数
|
|
|
+func GetUrlParams(params map[string]string) (paramStr string) {
|
|
|
+ GetSign(params)
|
|
|
+ // 待签名字符串
|
|
|
+ for index, val := range params {
|
|
|
+ paramStr += index + `=` + val + `&`
|
|
|
+ }
|
|
|
+ paramStr = paramStr[:len(paramStr)-1]
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// GetSign 获取签名
|
|
|
+func GetSign(params map[string]string) (paramStr string) {
|
|
|
+ //获取map的下标切片,然后对下标进行排序
|
|
|
+ keySlice := make([]string, 0)
|
|
|
+
|
|
|
+ //基础参数
|
|
|
+ params["appid"] = utils.COMEIN_APPID //签名用的是appid,实际请求用的appId
|
|
|
+ params["app"] = "json"
|
|
|
+
|
|
|
+ ignoreStr := []string{"app", "mod", "act"}
|
|
|
+ for index := range params {
|
|
|
+ //需要忽略的字符
|
|
|
+ if utils.InArrayByStr(ignoreStr, index) {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ keySlice = append(keySlice, index)
|
|
|
+ }
|
|
|
+ sort.Strings(keySlice)
|
|
|
+
|
|
|
+ // 待签名字符串
|
|
|
+ for _, index := range keySlice {
|
|
|
+ paramStr += index + `=` + params[index] + `&`
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取签名
|
|
|
+ signStr := utils.HmacMd5(utils.COMEIN_SECREKEY, paramStr[:len(paramStr)-1])
|
|
|
+ signature := url.QueryEscape(signStr)
|
|
|
+ params["signature"] = signature
|
|
|
+
|
|
|
+ delete(params, "appid")
|
|
|
+ params["appId"] = utils.COMEIN_APPID
|
|
|
+ return
|
|
|
+}
|