comein.go 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936
  1. package comein
  2. import (
  3. "context"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "hongze/hongze_task/models"
  8. "hongze/hongze_task/models/yb"
  9. "hongze/hongze_task/services/alarm_msg"
  10. "hongze/hongze_task/utils"
  11. "io/ioutil"
  12. "net/http"
  13. "net/url"
  14. "sort"
  15. "strconv"
  16. "time"
  17. )
  18. // EventListResp 会议列表返回数据结构
  19. type EventListResp struct {
  20. Code string `json:"code"`
  21. Data []EventListDataResp `json:"data"`
  22. Errorcode string `json:"errorcode"`
  23. Errordesc string `json:"errordesc"`
  24. Extra struct {
  25. HasMore bool `json:"hasMore"`
  26. More string `json:"more"`
  27. Pagestart string `json:"pagestart"`
  28. Total string `json:"total"`
  29. } `json:"extra"`
  30. Msg string `json:"msg"`
  31. Total int64 `json:"total"`
  32. }
  33. // EventListDataResp 会议数据
  34. type EventListDataResp struct {
  35. Authtag string `json:"authtag"`
  36. ConferenceType int64 `json:"conferenceType"`
  37. ContentTypeTagName string `json:"contentTypeTagName"`
  38. DescURL string `json:"descUrl"`
  39. Etime int64 `json:"etime"`
  40. ID int64 `json:"id"`
  41. IndustryName string `json:"industryName"`
  42. IsDel int64 `json:"isDel"`
  43. Livemode int64 `json:"livemode"`
  44. Logo string `json:"logo"`
  45. Logoweb string `json:"logoweb"`
  46. Members []struct {
  47. Identity int64 `json:"identity"`
  48. PhoneNumber string `json:"phoneNumber"`
  49. Type int64 `json:"type"`
  50. Uname string `json:"uname"`
  51. } `json:"members"`
  52. PresentURL string `json:"presentUrl"`
  53. RecordSupport int64 `json:"recordSupport"`
  54. RoadshowID int64 `json:"roadshowId"`
  55. ShortURL string `json:"shortUrl"`
  56. Status string `json:"status"`
  57. Stime int64 `json:"stime"`
  58. Title string `json:"title"`
  59. WxminiProgramID string `json:"wxminiProgramId"`
  60. WxminiProgramPage string `json:"wxminiProgramPage"`
  61. }
  62. // GetEventList 获取会议列表
  63. func GetEventList(startTime, endTime time.Time) (respData EventListResp, err error) {
  64. defer func() {
  65. if err != nil {
  66. go alarm_msg.SendAlarmMsg("查询组织下所有的会议列表失败;ERR:"+err.Error(), 3)
  67. }
  68. }()
  69. logMsg := ``
  70. pageStart := 0
  71. pageNum := 10
  72. paramsMap := map[string]string{
  73. "mod": "roadshow", //模块名
  74. "act": "opensearch", //处理方法名
  75. //"btime": fmt.Sprint(startTime.Unix() * 1000), //开始时间,时间戳
  76. //"etime": fmt.Sprint(endTime.Unix() * 1000), //结束时间,时间戳
  77. //"ignoredel": "1", //忽略已删除的数据 (1 删除的数据也可查询出)
  78. "pagestart": strconv.Itoa(pageStart), //翻页数 (第一页传 0 )
  79. "pagenum": strconv.Itoa(pageNum), //每页总条数(默认10条)
  80. "ts": fmt.Sprint(time.Now().Unix() * 1000), //请求发起的时间戳,单位:毫秒
  81. }
  82. paramStr := GetUrlParams(paramsMap)
  83. //fmt.Println(paramStr)
  84. //App string `json:"app" description:"数据类型"`
  85. //Mod string `json:"mod" description:"模块名"`
  86. //Act string `json:"act" description:"处理方法名"`
  87. //Appid string `json:"appid" description:"合作方ID"`
  88. getUrl := utils.COMEIN_URL + "?" + paramStr
  89. resp, err := http.Get(getUrl)
  90. if err != nil {
  91. logMsg = fmt.Sprint("comein get err; request:", getUrl, "; errMsg:", err.Error())
  92. utils.FileLog.Info(logMsg)
  93. return
  94. }
  95. defer resp.Body.Close()
  96. body, err := ioutil.ReadAll(resp.Body)
  97. if err != nil {
  98. logMsg = fmt.Sprint("comein get err; request:", getUrl, "; errMsg:", err.Error())
  99. utils.FileLog.Info(logMsg)
  100. return
  101. }
  102. utils.FileLog.Info(fmt.Sprint("comein get Result", ";url:", getUrl, ";\nresponse:", string(body)))
  103. err = json.Unmarshal(body, &respData)
  104. if err != nil {
  105. utils.FileLog.Info("comein get Err:", err.Error(), ";url:", getUrl, ";response:", string(body))
  106. err = errors.New("Unmarshal Err:" + err.Error())
  107. return
  108. }
  109. if respData.Errorcode != "0" {
  110. utils.FileLog.Info("comein get Err:", err.Error(), ";url:", getUrl, ";response:", string(body))
  111. err = errors.New(respData.Errordesc)
  112. return
  113. }
  114. return
  115. }
  116. // RoadshowDataResp 用户参会数据返回
  117. type RoadshowDataResp struct {
  118. Code string `json:"code"`
  119. Data []RoadshowData `json:"data"`
  120. Errorcode string `json:"errorcode"`
  121. Errordesc string `json:"errordesc"`
  122. Msg string `json:"msg"`
  123. }
  124. type RoadshowData struct {
  125. AreaCode string `json:"areaCode"`
  126. AskCount int64 `json:"askCount"`
  127. AuthInfo string `json:"authInfo"`
  128. Company string `json:"company"`
  129. DataType int64 `json:"dataType"`
  130. DutySeller string `json:"dutySeller"`
  131. Email string `json:"email"`
  132. FirstWatchTime int64 `json:"firstWatchTime"`
  133. GuestUserNames string `json:"guestUserNames"`
  134. ID int64 `json:"id"`
  135. JoinTime int64 `json:"joinTime"`
  136. JoinType int64 `json:"joinType"`
  137. LastWatchTime int64 `json:"lastWatchTime"`
  138. MeetingType string `json:"meetingType"`
  139. Occupation string `json:"occupation"`
  140. OrgRemarks string `json:"orgRemarks"`
  141. ResearchArea string `json:"researchArea"`
  142. RoadshowBeginTime int64 `json:"roadshowBeginTime"`
  143. RoadshowEndTime int64 `json:"roadshowEndTime"`
  144. RoadshowID int64 `json:"roadshowId"`
  145. RoadshowTitle string `json:"roadshowTitle"`
  146. RoadshowType int64 `json:"roadshowType"`
  147. SpeakerID int64 `json:"speakerId"`
  148. SpeakerName string `json:"speakerName"`
  149. TelFixedID int64 `json:"telFixedId"`
  150. TeleconferenceID string `json:"teleconferenceId"`
  151. ThirdMeetingID string `json:"thirdMeetingId"`
  152. UniqueID string `json:"uniqueId"`
  153. UserIdentity int64 `json:"userIdentity"`
  154. UserInfoSource string `json:"userInfoSource"`
  155. UserName string `json:"userName"`
  156. UserPhone string `json:"userPhone"`
  157. }
  158. // GetRoadshowDataList 获取参会人员列表
  159. func GetRoadshowDataList(startTime, endTime int64) (respData RoadshowDataResp, err error) {
  160. defer func() {
  161. if err != nil {
  162. go alarm_msg.SendAlarmMsg("获取参会人员列表失败;ERR:"+err.Error(), 3)
  163. }
  164. }()
  165. logMsg := ``
  166. paramsMap := map[string]string{
  167. "mod": "open", //模块名
  168. "act": "roadshow-datas", //处理方法名
  169. "beginTime": fmt.Sprint(startTime), //开始时间,时间戳
  170. "endTime": fmt.Sprint(endTime), //结束时间,时间戳
  171. "ts": fmt.Sprint(time.Now().Unix() * 1000), //请求发起的时间戳,单位:毫秒
  172. }
  173. paramStr := GetUrlParams(paramsMap)
  174. paramsMap["dataType"] = "1" //数据类型,1:直播 2:回放 (该参数不参与签名算法)
  175. //fmt.Println(paramStr)
  176. //App string `json:"app" description:"数据类型"`
  177. //Mod string `json:"mod" description:"模块名"`
  178. //Act string `json:"act" description:"处理方法名"`
  179. //Appid string `json:"appid" description:"合作方ID"`
  180. getUrl := utils.COMEIN_URL + "?" + paramStr
  181. resp, err := http.Get(getUrl)
  182. if err != nil {
  183. logMsg = fmt.Sprint("获取参会人员列表 comein get err; request:", getUrl, "; errMsg:", err.Error())
  184. utils.FileLog.Info(logMsg)
  185. return
  186. }
  187. defer resp.Body.Close()
  188. body, err := ioutil.ReadAll(resp.Body)
  189. if err != nil {
  190. logMsg = fmt.Sprint("获取参会人员列表 comein get err; request:", getUrl, "; errMsg:", err.Error())
  191. utils.FileLog.Info(logMsg)
  192. return
  193. }
  194. utils.FileLog.Info(fmt.Sprint("获取参会人员列表 comein get Result", ";url:", getUrl, ";\nresponse:", string(body)))
  195. err = json.Unmarshal(body, &respData)
  196. if err != nil {
  197. utils.FileLog.Info("获取参会人员列表 comein get Err:", err.Error(), ";url:", getUrl, ";response:", string(body))
  198. err = errors.New("Unmarshal Err:" + err.Error())
  199. return
  200. }
  201. if respData.Errorcode != "0" {
  202. utils.FileLog.Info("获取参会人员列表 comein get Err:", err.Error(), ";url:", getUrl, ";response:", string(body))
  203. err = errors.New(respData.Errordesc)
  204. return
  205. }
  206. return
  207. }
  208. // GetUrlParams 获取url请求参数
  209. func GetUrlParams(params map[string]string) (paramStr string) {
  210. GetSign(params)
  211. // 待签名字符串
  212. for index, val := range params {
  213. paramStr += index + `=` + val + `&`
  214. }
  215. paramStr = paramStr[:len(paramStr)-1]
  216. return
  217. }
  218. // GetSign 获取签名
  219. func GetSign(params map[string]string) (paramStr string) {
  220. //获取map的下标切片,然后对下标进行排序
  221. keySlice := make([]string, 0)
  222. //基础参数
  223. params["appid"] = utils.COMEIN_APPID //签名用的是appid,实际请求用的appId
  224. params["app"] = "json"
  225. ignoreStr := []string{"app", "mod", "act"}
  226. for index := range params {
  227. //需要忽略的字符
  228. if utils.InArrayByStr(ignoreStr, index) {
  229. continue
  230. }
  231. keySlice = append(keySlice, index)
  232. }
  233. sort.Strings(keySlice)
  234. // 待签名字符串
  235. for _, index := range keySlice {
  236. paramStr += index + `=` + params[index] + `&`
  237. }
  238. // 获取签名
  239. signStr := utils.HmacMd5(utils.COMEIN_SECREKEY, paramStr[:len(paramStr)-1])
  240. signature := url.QueryEscape(signStr)
  241. params["signature"] = signature
  242. delete(params, "appid")
  243. params["appId"] = utils.COMEIN_APPID
  244. return
  245. }
  246. // InitAddWhiteList 初始化进门财经白名单
  247. func InitAddWhiteList() (err error) {
  248. defer func() {
  249. if err != nil {
  250. go alarm_msg.SendAlarmMsg("InitAddWhiteList;ERR:"+err.Error(), 3)
  251. }
  252. }()
  253. postUrl := utils.COMEIN_URL
  254. list, err := models.GetComeinWhiteUserMulti()
  255. if err != nil {
  256. fmt.Println("GetUserMobileFormal Err:", err.Error())
  257. return
  258. }
  259. whiteList := make([]yb.Whitelist, 0)
  260. for _, v := range list {
  261. whiteUser := yb.Whitelist{}
  262. if v.Mobile != "" {
  263. whiteUser.Phone = v.Mobile
  264. whiteUser.Areacode = v.CountryCode
  265. whiteUser.Guid = utils.MD5(strconv.Itoa(v.UserId))
  266. whiteList = append(whiteList, whiteUser)
  267. } else if v.Email != "" {
  268. whiteUser.Email = v.Email
  269. whiteUser.Guid = utils.MD5(strconv.Itoa(v.UserId))
  270. whiteList = append(whiteList, whiteUser)
  271. }
  272. }
  273. fmt.Println("共" + strconv.Itoa(len(whiteList)) + "条数据")
  274. // 分批发送请求
  275. var count int
  276. request := yb.SyncWhitelist{
  277. Opt: 1,
  278. AppID: utils.COMEIN_WHITELIST_APPID,
  279. }
  280. for i, v := range whiteList {
  281. //whiteItem := yb.Whitelist{
  282. // Guid: v.Guid,
  283. // Phone: v.Phone,
  284. // Email: v.Email,
  285. // Areacode: v.Areacode,
  286. //}
  287. request.Whitelist = append(request.Whitelist, v)
  288. if count < 10000 && (len(whiteList)-i-1) > 0 {
  289. count++
  290. continue
  291. }
  292. count = 0
  293. timestamp := fmt.Sprintf("%d", time.Now().UnixNano()/1e6)
  294. signature := GetSignature("1", timestamp)
  295. request.Signature = signature
  296. request.Timestamp = timestamp
  297. jsonData, e := json.Marshal(request)
  298. if e != nil {
  299. err = e
  300. return
  301. }
  302. headers := map[string]string{
  303. "app": "json",
  304. "mod": "channelopen",
  305. "act": "whitelist",
  306. }
  307. // 发起POST请求
  308. resp, e := utils.MakePostRequest(postUrl, jsonData, headers)
  309. if e != nil {
  310. err = e
  311. utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";url:", postUrl)
  312. return
  313. }
  314. defer resp.Body.Close()
  315. body, e := ioutil.ReadAll(resp.Body)
  316. if e != nil {
  317. err = e
  318. fmt.Println("reponse error", err)
  319. return
  320. }
  321. result := new(yb.ComeinResponse)
  322. err = json.Unmarshal(body, &result)
  323. if err != nil {
  324. fmt.Println("json.Unmarshal Err:" + err.Error())
  325. return
  326. }
  327. utils.FileLog.Info(fmt.Sprint("comein addWhitelist Result", ";url:", postUrl, ";\nrequest:", jsonData, ";\nresponse:", string(body)))
  328. err = json.Unmarshal(body, &result)
  329. if err != nil {
  330. utils.FileLog.Info(fmt.Sprint("comein addWhitelist Result", ";url:", postUrl, ";\nrequest:", jsonData, ";\nresponse:", string(body)))
  331. err = errors.New("Unmarshal Err:" + err.Error())
  332. return
  333. }
  334. if result.ErrorCode != "0" {
  335. utils.FileLog.Info(fmt.Sprint("comein addWhitelist Result", ";url:", postUrl, ";\nrequest:", request, ";\nresponse:", string(body)))
  336. err = errors.New(result.ErrorDesc)
  337. return
  338. }
  339. request.Whitelist = nil
  340. time.Sleep(110 * time.Second)
  341. fmt.Println("同步成功:" + strconv.Itoa(i+1) + "条数据")
  342. }
  343. return
  344. }
  345. func GetSignature(opt, timestamp string) (signature string) {
  346. //获取map的下标切片,然后对下标进行排序
  347. keySlice := make([]string, 0)
  348. //基础参数
  349. params := make(map[string]string, 0)
  350. params["appid"] = utils.COMEIN_WHITELIST_APPID //签名用的是appid,实际请求用的appId
  351. if opt != "" {
  352. params["opt"] = opt
  353. }
  354. params["timestamp"] = timestamp
  355. for index := range params {
  356. keySlice = append(keySlice, index)
  357. }
  358. sort.Strings(keySlice)
  359. var paramStr string
  360. // 待签名字符串
  361. for _, index := range keySlice {
  362. paramStr += index + `=` + params[index] + `&`
  363. }
  364. paramStr = paramStr[:len(paramStr)-1]
  365. // 获取签名
  366. signStr := utils.HmacMd5(utils.COMEIN_WHITELIST_SECREKEY, paramStr)
  367. signature = url.QueryEscape(signStr)
  368. return
  369. }
  370. func InitComeinWhiteList() (err error) {
  371. list := make([]*models.ComeinWhiteUser, 0)
  372. realList, err := models.GetUserMobileFormal()
  373. if err != nil {
  374. fmt.Println("GetUserMobileFormal Err:", err.Error())
  375. return
  376. }
  377. for _, v := range realList {
  378. user := models.ComeinWhiteUser{
  379. Email: v.Email,
  380. Mobile: v.Mobile,
  381. CountryCode: "+86",
  382. IsFake: 0,
  383. }
  384. list = append(list, &user)
  385. }
  386. for i := 0; i < 100000-len(realList); i++ {
  387. phone := utils.RandomPhone()
  388. user := models.ComeinWhiteUser{
  389. Mobile: phone,
  390. CountryCode: "+86",
  391. IsFake: 1,
  392. }
  393. list = append(list, &user)
  394. }
  395. err = models.AddComeinWhiteUserMulti(list)
  396. if err != nil {
  397. fmt.Println("添加随机手机号失败", err.Error())
  398. return
  399. }
  400. fmt.Println("添加随机手机号成功")
  401. return
  402. }
  403. // SyncWhiteList 同步进门财经白名单定时任务
  404. func SyncWhiteList(cont context.Context) (err error) {
  405. defer func() {
  406. if err != nil {
  407. go alarm_msg.SendAlarmMsg("SyncWhiteList;ERR:"+err.Error(), 3)
  408. }
  409. }()
  410. // 拿白名单表
  411. list, err := models.GetComeinWhiteUserMulti()
  412. if err != nil {
  413. fmt.Println("GetUserMobileFormal Err:", err.Error())
  414. return
  415. }
  416. syncedMap := make(map[string]bool, 0)
  417. for _, v := range list {
  418. syncedMap[v.Mobile+v.Email] = true
  419. }
  420. //拿联系人表,需要进白名单的
  421. needAddList, err := models.GetUserMobileFormal()
  422. if err != nil {
  423. fmt.Println("GetUserMobileFormal Err:", err.Error())
  424. return
  425. }
  426. addMobiles := make([]string, 0)
  427. addemails := make([]string, 0)
  428. addList := make([]*models.ComeinWhiteUser, 0)
  429. for _, v := range needAddList {
  430. if _, ok := syncedMap[v.Mobile+v.Email]; !ok {
  431. user := models.ComeinWhiteUser{
  432. UserId: v.UserId,
  433. Mobile: v.Mobile,
  434. CountryCode: "+"+v.CountryCode,
  435. Email: v.Email,
  436. IsFake: 0,
  437. }
  438. addList = append(addList, &user)
  439. if v.Mobile != "" {
  440. addMobiles = append(addMobiles,"'"+ v.Mobile+"'")
  441. } else if v.Email != "" {
  442. addemails = append(addemails,"'"+ v.Email+"'")
  443. }
  444. }
  445. }
  446. err = models.AddComeinWhiteUserMulti(addList)
  447. if err != nil {
  448. fmt.Println("新增白名单失败,AddComeinWhiteUserMulti", err.Error())
  449. return
  450. }
  451. err = syncWhiteList(addMobiles,addemails, 1)
  452. if err != nil {
  453. fmt.Println("新增白名单失败", err.Error())
  454. return
  455. }
  456. //拿联系人表,需要删除的
  457. needDelList, err := models.GetUserMobileNotFormal()
  458. if err != nil {
  459. fmt.Println("GetUserMobileFormal Err:", err.Error())
  460. return
  461. }
  462. delMobiles := make([]string, 0)
  463. delEmials := make([]string, 0)
  464. delList := make([]*models.ComeinWhiteUser, 0)
  465. for _, v := range needDelList {
  466. if _, ok := syncedMap[v.Mobile+v.Email]; ok {
  467. user := models.ComeinWhiteUser{
  468. Mobile: v.Mobile,
  469. CountryCode: "+"+v.CountryCode,
  470. Email: v.Email,
  471. IsFake: 0,
  472. }
  473. delList = append(delList, &user)
  474. if v.Mobile != "" {
  475. delMobiles = append(delMobiles, "'"+v.Mobile+"'")
  476. } else if v.Email != "" {
  477. delEmials = append(delEmials, "'"+v.Email+"'")
  478. }
  479. }
  480. }
  481. err = syncWhiteList(delMobiles, delEmials, 2)
  482. if err != nil {
  483. fmt.Println("删除白名单失败", err.Error())
  484. return
  485. }
  486. delIds := make([]int, 0)
  487. for _, v := range delList {
  488. delIds = append(delIds, v.UserId)
  489. }
  490. err = models.DelComeinWhiteUserMulti(delIds)
  491. if err != nil {
  492. fmt.Println("删除白名单失败,DelComeinWhiteUserMulti", err.Error())
  493. return
  494. }
  495. return
  496. }
  497. func syncWhiteList(mobiles, emails []string, opt int) (err error) {
  498. postUrl := utils.COMEIN_URL
  499. timestamp := fmt.Sprintf("%d", time.Now().UnixNano()/1e6)
  500. signature := GetSignature(strconv.Itoa(opt), timestamp)
  501. request := yb.SyncWhitelist{
  502. Opt: opt,
  503. Timestamp: timestamp,
  504. AppID: utils.COMEIN_WHITELIST_APPID,
  505. Signature: signature,
  506. }
  507. whiteList := make([]yb.Whitelist, 0)
  508. list, err := models.GetComeinWhiteUser(mobiles, emails)
  509. if err != nil {
  510. return
  511. }
  512. for _, v := range list {
  513. whiteUser := yb.Whitelist{}
  514. if v.Mobile != "" {
  515. whiteUser.Phone = v.Mobile
  516. whiteUser.Areacode = v.CountryCode
  517. whiteUser.Guid = utils.MD5(strconv.Itoa(v.UserId))
  518. whiteList = append(whiteList, whiteUser)
  519. } else if v.Email != "" {
  520. whiteUser.Email = v.Email
  521. whiteUser.Guid = utils.MD5(strconv.Itoa(v.UserId))
  522. whiteList = append(whiteList, whiteUser)
  523. }
  524. }
  525. request.Whitelist = whiteList
  526. jsonData, err := json.Marshal(request)
  527. if err != nil {
  528. return
  529. }
  530. headers := map[string]string{
  531. "app": "json",
  532. "mod": "channelopen",
  533. "act": "whitelist",
  534. }
  535. // 发起POST请求
  536. resp, err := utils.MakePostRequest(postUrl, jsonData, headers)
  537. if err != nil {
  538. utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";url:", postUrl)
  539. return
  540. }
  541. defer resp.Body.Close()
  542. body, err := ioutil.ReadAll(resp.Body)
  543. if err != nil {
  544. fmt.Println("reponse error", err)
  545. return
  546. }
  547. utils.FileLog.Info(fmt.Sprint("comein syncWhiteList Result", ";url:", postUrl, ";\nrequest:", request, ";\nresponse:", string(body)))
  548. result := new(yb.ComeinResponse)
  549. err = json.Unmarshal(body, &result)
  550. if err != nil {
  551. utils.FileLog.Info("comein syncWhiteList Err:", err.Error(), ";url:", postUrl, ";response:", string(body))
  552. err = errors.New("Unmarshal Err:" + err.Error())
  553. return
  554. }
  555. if result.ErrorCode != "0" {
  556. utils.FileLog.Info("comein syncWhiteList Err:", err.Error(), ";url:", postUrl, ";response:", string(body))
  557. err = errors.New(result.ErrorDesc)
  558. return
  559. }
  560. return
  561. }
  562. // CheckWhiteList
  563. func CheckComeinWhiteList() (err error) {
  564. defer func() {
  565. if err != nil {
  566. go alarm_msg.SendAlarmMsg("InitAddWhiteList;ERR:"+err.Error(), 3)
  567. }
  568. }()
  569. logMsg := ``
  570. timestamp := fmt.Sprintf("%d", time.Now().UnixNano()/1e6)
  571. signature := GetSignature("", timestamp)
  572. headers := map[string]string{
  573. "app": "json", //模块名
  574. "mod": "channelopen", //模块名
  575. "act": "list-detail", //处理方法名
  576. }
  577. paramsMap := map[string]string{
  578. "appId": utils.COMEIN_WHITELIST_APPID,
  579. "signature": signature,
  580. "timestamp": timestamp,
  581. "phone": "138108810525",
  582. }
  583. paramStr := ``
  584. for index, val := range paramsMap {
  585. paramStr += index + `=` + val + `&`
  586. }
  587. paramStr = paramStr[:len(paramStr)-1]
  588. getUrl := utils.COMEIN_URL + "?" + paramStr
  589. // 创建一个新的请求
  590. req, err := http.NewRequest("GET", getUrl, nil)
  591. if err != nil {
  592. fmt.Println("Error creating request:", err)
  593. return
  594. }
  595. // 添加自定义的头部信息
  596. for k, v := range headers {
  597. req.Header.Add(k, v)
  598. }
  599. // 发送请求并获取响应
  600. client := http.Client{}
  601. resp, err := client.Do(req)
  602. if err != nil {
  603. fmt.Println("Error sending request:", err)
  604. return
  605. }
  606. defer resp.Body.Close()
  607. body, err := ioutil.ReadAll(resp.Body)
  608. if err != nil {
  609. logMsg = fmt.Sprint("获取参会人员列表 comein get err; request:", getUrl, "; errMsg:", err.Error())
  610. utils.FileLog.Info(logMsg)
  611. return
  612. }
  613. result := new(yb.ComeinResponse)
  614. err = json.Unmarshal(body, &result)
  615. if err != nil {
  616. fmt.Println("json.Unmarshal Err:" + err.Error())
  617. return
  618. }
  619. utils.FileLog.Info(fmt.Sprint("comein addWhitelist Result", ";\nresponse:", string(body)))
  620. err = json.Unmarshal(body, &result)
  621. if err != nil {
  622. utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";response:", string(body))
  623. err = errors.New("Unmarshal Err:" + err.Error())
  624. return
  625. }
  626. if result.ErrorCode != "0" {
  627. utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";response:", string(body))
  628. err = errors.New(result.ErrorDesc)
  629. return
  630. }
  631. return
  632. }
  633. func AddWhiteList() (err error) {
  634. defer func() {
  635. if err != nil {
  636. go alarm_msg.SendAlarmMsg("InitAddWhiteList;ERR:"+err.Error(), 3)
  637. }
  638. }()
  639. postUrl := utils.COMEIN_URL
  640. whiteUser := yb.Whitelist{}
  641. whiteUser.Phone = "188286375317"
  642. whiteUser.Areacode = "+86"
  643. whiteUser.Guid = "26968fa5f8753ffdbaaab97fbe092f4f"
  644. request := yb.SyncWhitelist{
  645. Opt: 1,
  646. AppID: utils.COMEIN_WHITELIST_APPID,
  647. }
  648. request.Whitelist = append(request.Whitelist, whiteUser)
  649. timestamp := fmt.Sprintf("%d", time.Now().UnixNano()/1e6)
  650. signature := GetSignature("1", timestamp)
  651. request.Signature = signature
  652. request.Timestamp = timestamp
  653. jsonData, e := json.Marshal(request)
  654. if e != nil {
  655. err = e
  656. return
  657. }
  658. headers := map[string]string{
  659. "app": "json",
  660. "mod": "channelopen",
  661. "act": "whitelist",
  662. }
  663. // 发起POST请求
  664. resp, e := utils.MakePostRequest(postUrl, jsonData, headers)
  665. if e != nil {
  666. err = e
  667. utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";url:", postUrl)
  668. return
  669. }
  670. defer resp.Body.Close()
  671. body, e := ioutil.ReadAll(resp.Body)
  672. if e != nil {
  673. err = e
  674. fmt.Println("reponse error", err)
  675. return
  676. }
  677. result := new(yb.ComeinResponse)
  678. err = json.Unmarshal(body, &result)
  679. if err != nil {
  680. fmt.Println("json.Unmarshal Err:" + err.Error())
  681. return
  682. }
  683. utils.FileLog.Info(fmt.Sprint("comein addWhitelist Result", ";url:", postUrl, ";\nresponse:", string(body)))
  684. err = json.Unmarshal(body, &result)
  685. if err != nil {
  686. utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";url:", postUrl, ";response:", string(body))
  687. err = errors.New("Unmarshal Err:" + err.Error())
  688. return
  689. }
  690. if result.ErrorCode != "0" {
  691. utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";url:", postUrl, ";response:", string(body))
  692. err = errors.New(result.ErrorDesc)
  693. return
  694. }
  695. request.Whitelist = nil
  696. return
  697. }
  698. // CheckWhiteList
  699. func CheckComeinWhiteListByJobId() (err error) {
  700. defer func() {
  701. if err != nil {
  702. go alarm_msg.SendAlarmMsg("InitAddWhiteList;ERR:"+err.Error(), 3)
  703. }
  704. }()
  705. logMsg := ``
  706. headers := map[string]string{
  707. "app": "json", //模块名
  708. "mod": "channelopen", //模块名
  709. "act": "get-result", //处理方法名
  710. }
  711. paramsMap := map[string]string{
  712. "jobId": "a180a8a4-a674-48ce-aa96-5a373c7dcc9c",
  713. }
  714. paramStr := ``
  715. for index, val := range paramsMap {
  716. paramStr += index + `=` + val + `&`
  717. }
  718. paramStr = paramStr[:len(paramStr)-1]
  719. getUrl := utils.COMEIN_URL + "?" + paramStr
  720. // 创建一个新的请求
  721. req, err := http.NewRequest("GET", getUrl, nil)
  722. if err != nil {
  723. fmt.Println("Error creating request:", err)
  724. return
  725. }
  726. // 添加自定义的头部信息
  727. for k, v := range headers {
  728. req.Header.Add(k, v)
  729. }
  730. // 发送请求并获取响应
  731. client := http.Client{}
  732. resp, err := client.Do(req)
  733. if err != nil {
  734. fmt.Println("Error sending request:", err)
  735. return
  736. }
  737. defer resp.Body.Close()
  738. body, err := ioutil.ReadAll(resp.Body)
  739. if err != nil {
  740. logMsg = fmt.Sprint("获取参会人员列表 comein get err; request:", getUrl, "; errMsg:", err.Error())
  741. utils.FileLog.Info(logMsg)
  742. return
  743. }
  744. result := new(yb.ComeinResponse)
  745. err = json.Unmarshal(body, &result)
  746. if err != nil {
  747. fmt.Println("json.Unmarshal Err:" + err.Error())
  748. return
  749. }
  750. utils.FileLog.Info(fmt.Sprint("comein addWhitelist Result", ";\nresponse:", string(body)))
  751. err = json.Unmarshal(body, &result)
  752. if err != nil {
  753. utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";response:", string(body))
  754. err = errors.New("Unmarshal Err:" + err.Error())
  755. return
  756. }
  757. if result.ErrorCode != "0" {
  758. utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";response:", string(body))
  759. err = errors.New(result.ErrorDesc)
  760. return
  761. }
  762. return
  763. }
  764. func GetWhiteList() (err error) {
  765. defer func() {
  766. if err != nil {
  767. go alarm_msg.SendAlarmMsg("InitAddWhiteList;ERR:"+err.Error(), 3)
  768. }
  769. }()
  770. postUrl := utils.COMEIN_URL
  771. timestamp := fmt.Sprintf("%d", time.Now().UnixNano()/1e6)
  772. signature := GetSignature("", timestamp)
  773. request := yb.GetWhitelist{
  774. Ts: timestamp,
  775. AppID: utils.COMEIN_WHITELIST_APPID,
  776. Signature: signature,
  777. }
  778. jsonData, e := json.Marshal(request)
  779. if e != nil {
  780. err = e
  781. return
  782. }
  783. headers := map[string]string{
  784. "app": "json",
  785. "mod": "channelopen",
  786. "act": "get-whitelist-v1",
  787. }
  788. // 发起POST请求
  789. resp, e := utils.MakePostRequest(postUrl, jsonData, headers)
  790. if e != nil {
  791. err = e
  792. utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";url:", postUrl)
  793. return
  794. }
  795. defer resp.Body.Close()
  796. body, e := ioutil.ReadAll(resp.Body)
  797. if e != nil {
  798. err = e
  799. fmt.Println("reponse error", err)
  800. return
  801. }
  802. result := new(yb.ComeinResponse)
  803. err = json.Unmarshal(body, &result)
  804. if err != nil {
  805. fmt.Println("json.Unmarshal Err:" + err.Error())
  806. return
  807. }
  808. utils.FileLog.Info(fmt.Sprint("comein addWhitelist Result", ";url:", postUrl, ";\nresponse:", string(body)))
  809. err = json.Unmarshal(body, &result)
  810. if err != nil {
  811. utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";url:", postUrl, ";response:", string(body))
  812. err = errors.New("Unmarshal Err:" + err.Error())
  813. return
  814. }
  815. if result.ErrorCode != "0" {
  816. utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";url:", postUrl, ";response:", string(body))
  817. err = errors.New(result.ErrorDesc)
  818. return
  819. }
  820. return
  821. }