wx_category_template_msg.go 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038
  1. package services
  2. import (
  3. "context"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "hongze/hongze_mfyx/models"
  8. "hongze/hongze_mfyx/utils"
  9. "io/ioutil"
  10. "net/http"
  11. "strconv"
  12. "strings"
  13. "time"
  14. )
  15. type SendWxCategoryTemplate struct {
  16. WxAppId string `description:"公众号appId"`
  17. Keywords []string `description:"模板消息keyword字段"`
  18. TemplateId string `description:"模板id"`
  19. RedirectUrl string `description:"跳转地址"`
  20. RedirectTarget int `description:"小程序跳转目标:1:弘则研报小程序,2:随手办公小程序,3:查研观向,4:买方研选"`
  21. Resource string `description:"资源唯一标识"`
  22. SendType int `description:"发送的消息类型:1:报告,2:指标更新提醒,3:审批通知,4:销售领取客户通知,5:活动取消通知,6活动更改时间通知,7:关注的作者发布报告通知,8:发送日报(周报、双周报、月报)模板消息,9:活动预约/报名时间通知"`
  23. OpenIdArr []string `description:"消息接收者openid"`
  24. }
  25. // 推送类目模板消息
  26. func SendCategoryTemplateMsg(sendInfo *SendWxCategoryTemplate) (err error) {
  27. postData, err := json.Marshal(sendInfo)
  28. if err != nil {
  29. go utils.SendAlarmMsg("SendCategoryTemplateMsg json.Marshal Err:"+err.Error(), 1)
  30. return err
  31. }
  32. body := ioutil.NopCloser(strings.NewReader(string(postData)))
  33. client := &http.Client{}
  34. req, err := http.NewRequest("POST", utils.SendWxCategoryTemplateMsgUrl, body)
  35. if err != nil {
  36. go utils.SendAlarmMsg("SendCategoryTemplateMsg http.NewRequest Err:"+err.Error(), 1)
  37. return err
  38. }
  39. contentType := "application/json;charset=utf-8"
  40. req.Header.Set("Content-Type", contentType)
  41. req.Header.Set("Authorization", utils.SendTemplateMsgAuthorization)
  42. resp, err := client.Do(req)
  43. if err != nil {
  44. fmt.Println("http client.Do Err:" + err.Error())
  45. return err
  46. }
  47. defer resp.Body.Close()
  48. b, err := ioutil.ReadAll(resp.Body)
  49. if err != nil {
  50. return err
  51. }
  52. result := new(models.BaseResponse)
  53. err = json.Unmarshal(b, &result)
  54. if err != nil {
  55. return err
  56. }
  57. if result.Ret != 200 {
  58. err = errors.New(string(b))
  59. return err
  60. }
  61. return
  62. }
  63. // 发送用户操作活动消息提醒
  64. func SendWxCategoryMsgWithActivityUserRemind(keyWord1, keyWord2, keyWord3, keyWord4 string, openIdList []*models.OpenIdList, activityId int) (err error) {
  65. if len(openIdList) == 0 {
  66. return
  67. }
  68. var msg string
  69. defer func() {
  70. if err != nil {
  71. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  72. go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityId), 2)
  73. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  74. }
  75. }()
  76. keyWord1 = utils.TruncateActivityNameString(keyWord1)
  77. accessToken, err := models.GetWxAccessTokenByXzs()
  78. if err != nil {
  79. msg = "GetWxAccessToken Err:" + err.Error()
  80. return
  81. }
  82. if accessToken == "" {
  83. msg = "accessToken is empty"
  84. return
  85. }
  86. openIdArr := make([]string, 0)
  87. for _, v := range openIdList {
  88. openIdArr = append(openIdArr, v.OpenId)
  89. }
  90. var keywords []string
  91. keywords = append(keywords, keyWord1, keyWord2, keyWord3, keyWord4)
  92. sendInfo := new(SendWxCategoryTemplate)
  93. sendInfo.Keywords = keywords
  94. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdActivityPublishApply
  95. sendInfo.RedirectTarget = 4
  96. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
  97. sendInfo.OpenIdArr = openIdArr
  98. err = SendCategoryTemplateMsg(sendInfo)
  99. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
  100. return
  101. }
  102. // 试用申请模板消息
  103. func SendPermissionApplyCategoryTemplateMsg(realName, companyName, mobile, applyMethod string, itemOpenid *models.OpenIdList, redirectUrl string) (err error) {
  104. defer func() {
  105. if err != nil {
  106. go utils.SendAlarmMsg(fmt.Sprint("权限申请模板消息推送消息失败,手机号", mobile, "公司:", companyName, "手机号:", mobile, ";Err:"+err.Error()), 2)
  107. }
  108. }()
  109. var keyword1 string
  110. var keyword2 string
  111. var keyword3 string
  112. var keyword4 string
  113. var keyword5 string
  114. detail, e := models.GetCygxApplyRecordByMobile(mobile)
  115. if e != nil {
  116. err = errors.New("GetActivitySignupNomeetingCountList" + e.Error())
  117. return
  118. }
  119. //如果是潜在客户就推送可查看详情的模版消息
  120. if detail.ApplyMethod == 2 {
  121. redirectUrl = utils.WX_MSG_PATH_APPLY_DETAIL + strconv.Itoa(detail.ApplyRecordId)
  122. }
  123. openIdArr := make([]string, 0)
  124. openIdArr = append(openIdArr, itemOpenid.OpenId)
  125. sendInfo := new(SendWxCategoryTemplate)
  126. keyword1 = realName
  127. keyword2 = companyName
  128. keyword3 = "权限申请"
  129. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  130. keyword5 = applyMethod
  131. sendInfo.Keywords = []string{keyword1, keyword2, keyword3, keyword4, keyword5}
  132. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  133. sendInfo.RedirectUrl = redirectUrl
  134. sendInfo.RedirectTarget = 4
  135. sendInfo.Resource = mobile
  136. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
  137. sendInfo.OpenIdArr = openIdArr
  138. err = SendCategoryTemplateMsg(sendInfo)
  139. return
  140. }
  141. // 发送用户操作活动消息提醒
  142. func SendNeiRongZuActivitieSignCategoryTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
  143. var msg string
  144. defer func() {
  145. if err != nil {
  146. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  147. go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityDetail.ActivityId), 2)
  148. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  149. }
  150. }()
  151. accessToken, err := models.GetWxAccessTokenByXzs()
  152. if err != nil {
  153. msg = "GetWxAccessToken Err:" + err.Error()
  154. return
  155. }
  156. if accessToken == "" {
  157. msg = "accessToken is empty"
  158. return
  159. }
  160. sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  161. if err != nil && err.Error() != utils.ErrNoRow() {
  162. return
  163. }
  164. configCode := utils.TPL_MSG_NEI_RONG_ZU
  165. cnf, e := models.GetConfigByCode(configCode)
  166. if e != nil {
  167. err = errors.New("GetConfigByCode, Err: " + e.Error() + configCode)
  168. return
  169. }
  170. openIdList, e := models.GetUserRecordListByMobile(4, cnf.ConfigValue+","+sellerItemQy.Mobile+","+utils.MobileShenTao)
  171. if e != nil && e.Error() != utils.ErrNoRow() {
  172. err = errors.New("GetUserRecordListByMobile, Err: " + e.Error() + cnf.ConfigValue)
  173. return
  174. }
  175. openIdArr := make([]string, 0)
  176. for _, v := range openIdList {
  177. openIdArr = append(openIdArr, v.OpenId)
  178. }
  179. var keywords []string
  180. keywords = append(keywords, user.RealName, user.CompanyName,
  181. sellerItemQy.RealName, time.Now().Format(utils.FormatDateTimeMinute2),
  182. "报名:"+activityDetail.ActivityName)
  183. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityDetail.ActivityId)}
  184. sendInfo := new(SendWxCategoryTemplate)
  185. sendInfo.Keywords = keywords
  186. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  187. sendInfo.RedirectTarget = 4
  188. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
  189. sendInfo.OpenIdArr = openIdArr
  190. err = SendCategoryTemplateMsg(sendInfo)
  191. return
  192. }
  193. func SendActivitieCancelSignCategoryTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
  194. var msg string
  195. defer func() {
  196. if err != nil {
  197. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  198. go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityDetail.ActivityId), 2)
  199. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  200. }
  201. }()
  202. accessToken, err := models.GetWxAccessTokenByXzs()
  203. if err != nil {
  204. msg = "GetWxAccessToken Err:" + err.Error()
  205. return
  206. }
  207. if accessToken == "" {
  208. msg = "accessToken is empty"
  209. return
  210. }
  211. sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  212. if err != nil && err.Error() != utils.ErrNoRow() {
  213. return
  214. }
  215. configCode := utils.TPL_MSG_NEI_RONG_ZU
  216. cnf, e := models.GetConfigByCode(configCode)
  217. if e != nil {
  218. err = errors.New("GetConfigByCode, Err: " + e.Error() + configCode)
  219. return
  220. }
  221. openIdList, e := models.GetUserRecordListByMobile(4, cnf.ConfigValue+","+sellerItemQy.Mobile+","+utils.MobileShenTao)
  222. if e != nil && e.Error() != utils.ErrNoRow() {
  223. err = errors.New("GetUserRecordListByMobile, Err: " + e.Error() + cnf.ConfigValue)
  224. return
  225. }
  226. openIdArr := make([]string, 0)
  227. for _, v := range openIdList {
  228. openIdArr = append(openIdArr, v.OpenId)
  229. }
  230. var keywords []string
  231. keywords = append(keywords, user.RealName, user.CompanyName,
  232. sellerItemQy.RealName, time.Now().Format(utils.FormatDateTimeMinute2),
  233. "取消报名"+"【"+activityDetail.ActivityName+"】")
  234. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId}
  235. sendInfo := new(SendWxCategoryTemplate)
  236. sendInfo.WxAppId = utils.WxAppId
  237. sendInfo.Keywords = keywords
  238. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  239. sendInfo.RedirectTarget = 4
  240. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
  241. sendInfo.OpenIdArr = openIdArr
  242. err = SendCategoryTemplateMsg(sendInfo)
  243. return
  244. }
  245. // 发送用户留言提醒
  246. func SendCommentWxCategoryTemplateMsg(req models.AddCygxArticleCommentReq, user *models.WxUserItem, articleInfo *models.ArticleDetail, msgId int) (err error) {
  247. var msg string
  248. defer func() {
  249. if err != nil {
  250. go utils.SendEmail("发送类目模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  251. go utils.SendAlarmMsg(fmt.Sprint("发送用户用户留言提醒失败,文章ID:", req.ArticleId), 2)
  252. utils.FileLog.Info("发送类目模版消息失败,Err:%s", err.Error())
  253. }
  254. }()
  255. companyItem, e := models.GetSellerDetailAllByCompanyId(user.CompanyId)
  256. if e != nil {
  257. return
  258. }
  259. if companyItem == nil {
  260. msg = "获取客户所属销售信息失败,UserID:" + strconv.Itoa(user.UserId)
  261. }
  262. var keyword1 string
  263. var keyword2 string
  264. var keyword3 string
  265. var keyword4 string
  266. var keyword5 string
  267. var redirectUrl string
  268. var mobile string
  269. var keywords []string
  270. keyword1 = user.RealName
  271. keyword2 = companyItem.CompanyName
  272. keyword3 = companyItem.SellerName
  273. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  274. keyword5 = "报告留言:" + req.Content
  275. keyword5 = utils.TruncateActivityNameString(keyword5)
  276. keywords = append(keywords, keyword1, keyword2, keyword3, keyword4, keyword5)
  277. if articleInfo.ArticleTypeId > 0 {
  278. //研选报告添加汪洋
  279. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic + "," + utils.ActSendMsgMobile
  280. } else {
  281. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic
  282. }
  283. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  284. if e != nil {
  285. err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
  286. return
  287. }
  288. openIdArr := make([]string, 0)
  289. for _, v := range openIdList {
  290. openIdArr = append(openIdArr, v.OpenId)
  291. }
  292. redirectUrl = utils.WX_MSG_PATH_YX_COMMENT_DETAIL + strconv.Itoa(msgId) + "&type=文章"
  293. sendInfo := new(SendWxCategoryTemplate)
  294. sendInfo.Keywords = keywords
  295. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  296. sendInfo.RedirectTarget = 4
  297. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
  298. sendInfo.OpenIdArr = openIdArr
  299. sendInfo.RedirectUrl = redirectUrl
  300. err = SendCategoryTemplateMsg(sendInfo)
  301. return
  302. }
  303. // 发送报告提问消息提醒
  304. func SendWxCategoryMsgWithAsk(companyName, realName, sellerName, askTime, askMsg string, openIdList []*models.OpenIdList, articleId int) (err error) {
  305. if len(openIdList) == 0 {
  306. return
  307. }
  308. var msg string
  309. defer func() {
  310. if err != nil {
  311. go utils.SendEmail("发送类目模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  312. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒类目模版消息失败,用户名", realName, "文章ID:", articleId), 2)
  313. utils.FileLog.Info("发送类目模版消息失败,Err:%s", err.Error())
  314. }
  315. fmt.Println("line 21", err, msg)
  316. }()
  317. var keyword1 string
  318. var keyword2 string
  319. var keyword3 string
  320. var keyword4 string
  321. var keyword5 string
  322. keyword1 = realName
  323. keyword2 = companyName
  324. keyword3 = sellerName
  325. keyword4 = askTime
  326. keyword4 = "活动提问:" + askMsg
  327. keywords := []string{keyword1, keyword2, keyword3, keyword4, keyword5}
  328. openIdArr := make([]string, 0)
  329. for _, v := range openIdList {
  330. openIdArr = append(openIdArr, v.OpenId)
  331. }
  332. redirectUrl := utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleId)
  333. sendInfo := new(SendWxCategoryTemplate)
  334. sendInfo.Keywords = keywords
  335. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  336. sendInfo.RedirectTarget = 4
  337. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  338. sendInfo.OpenIdArr = openIdArr
  339. sendInfo.RedirectUrl = redirectUrl
  340. err = SendCategoryTemplateMsg(sendInfo)
  341. return
  342. }
  343. // SendActivitieSignCategoryTemplateMsg 线下调研活动扫码签到给对应销售发类目模班消息
  344. func SendActivitieSignCategoryTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
  345. defer func() {
  346. if err != nil {
  347. go utils.SendAlarmMsg(fmt.Sprint("线下调研活动扫码签到给对应销售发模班消息推送失败Err:", err.Error(), "活动ID:", activityDetail.ActivityId, "手机号:", user.Mobile), 2)
  348. }
  349. }()
  350. var mobiles []string
  351. //获取销售信息
  352. sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  353. if err != nil && err.Error() != utils.ErrNoRow() {
  354. return
  355. }
  356. if sellerItem != nil {
  357. mobiles = append(mobiles, sellerItem.Mobile, utils.MobileWuAngDi, utils.MobileDongHeng, utils.MobileShenTao)
  358. }
  359. var keyword1 string
  360. var keyword2 string
  361. var keyword3 string
  362. var keyword4 string
  363. var keyword5 string
  364. var redirectUrl string
  365. keyword1 = user.RealName
  366. keyword2 = user.CompanyName
  367. keyword3 = sellerItem.RealName
  368. keyword4 = activityDetail.ActivityName
  369. keyword5 = time.Now().Format(utils.FormatDateTimeMinute2)
  370. openIdList, e := models.GetWxOpenIdByMobileSliceList(mobiles)
  371. if e != nil {
  372. err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
  373. return
  374. }
  375. openIdArr := make([]string, 0)
  376. for _, v := range openIdList {
  377. openIdArr = append(openIdArr, v.OpenId)
  378. }
  379. redirectUrl = utils.WX_MSG_PATH_YX_SIGNUP_DETAIL + strconv.Itoa(activityDetail.ActivityId)
  380. keywords := []string{keyword1, keyword2, keyword3, keyword4, keyword5}
  381. sendInfo := new(SendWxCategoryTemplate)
  382. sendInfo.Keywords = keywords
  383. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdActivitySign
  384. sendInfo.RedirectTarget = 4
  385. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  386. sendInfo.OpenIdArr = openIdArr
  387. sendInfo.RedirectUrl = redirectUrl
  388. err = SendCategoryTemplateMsg(sendInfo)
  389. if err != nil {
  390. return
  391. }
  392. return
  393. }
  394. // SendReviewCategoryTemplateMsgAdmin 提交审核时给王芳,汪洋发消息
  395. func SendReviewCategoryTemplateMsgAdmin(specialId int) (err error) {
  396. defer func() {
  397. if err != nil {
  398. go utils.SendAlarmMsg(fmt.Sprint("处理试用申请给王芳,汪洋发消息失败, specialId:", specialId, "ErrMsg", err.Error()), 2)
  399. }
  400. }()
  401. //王芳、葛琳和沈涛
  402. openIdList, e := models.GetUserRecordListByMobile(4, utils.WxMsgTemplateIdYXSpecialReview)
  403. if e != nil && e.Error() != utils.ErrNoRow() {
  404. err = errors.New("GetUserRecordListByMobile, Err: " + e.Error())
  405. return err
  406. }
  407. specialItem, e := models.GetYanxuanSpecialItemById(specialId)
  408. if e != nil {
  409. err = errors.New("GetYanxuanSpecialFollowUserById, Err: " + e.Error())
  410. return
  411. }
  412. user, e := models.GetWxUserItemByUserId(specialItem.UserId)
  413. if e != nil {
  414. err = errors.New("GetWxUserItemByUserId, Err: " + e.Error())
  415. return err
  416. }
  417. var keyword1 string
  418. var keyword2 string
  419. var keyword3 string
  420. var keyword4 string
  421. var keyword5 string
  422. keyword1 = specialItem.NickName
  423. keyword2 = specialItem.RealName + "-" + user.CompanyName
  424. keyword3 = specialItem.SpecialName
  425. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  426. keyword5 = "研选专栏提交了内容待审核"
  427. openIdArr := make([]string, 0)
  428. for _, v := range openIdList {
  429. openIdArr = append(openIdArr, v.OpenId)
  430. }
  431. redirectUrl := ""
  432. redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_ENABLE_DETAIL + strconv.Itoa(specialId)
  433. keywords := []string{keyword1, keyword2, keyword3, keyword4, keyword5}
  434. sendInfo := new(SendWxCategoryTemplate)
  435. sendInfo.Keywords = keywords
  436. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  437. sendInfo.RedirectTarget = 4
  438. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  439. sendInfo.OpenIdArr = openIdArr
  440. sendInfo.RedirectUrl = redirectUrl
  441. err = SendCategoryTemplateMsg(sendInfo)
  442. if err != nil {
  443. return
  444. }
  445. return
  446. }
  447. // 研选专栏审核完成时,给提交人发送类目模板消息
  448. func SendWxCategoryMsgSpecialAuthor(specialId, status int) (err error) {
  449. defer func() {
  450. if err != nil {
  451. go utils.SendAlarmMsg(fmt.Sprint("研选专栏审核完成时,给提交人发送模板消息", specialId, ", specialId", err.Error()), 2)
  452. }
  453. }()
  454. var keyword1 string
  455. var keyword2 string
  456. var keyword3 string
  457. var keyword4 string
  458. var redirectUrl string
  459. specialItem, e := models.GetYanxuanSpecialItemById(specialId)
  460. if e != nil {
  461. err = errors.New("GetYanxuanSpecialFollowUserById, Err: " + e.Error())
  462. return
  463. }
  464. user, e := models.GetWxUserItemByUserId(specialItem.UserId)
  465. if e != nil {
  466. err = errors.New("GetWxUserItemByUserId, Err: " + e.Error())
  467. return err
  468. }
  469. openIdList, err := models.GetUserRecordListByMobile(4, user.Mobile)
  470. if err != nil && err.Error() != utils.ErrNoRow() {
  471. return err
  472. }
  473. keyword1 = specialItem.Title
  474. keyword2 = specialItem.NickName
  475. if status == 1 {
  476. keyword3 = "文章已通过审核,点击查看详情"
  477. redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_DETAIL + strconv.Itoa(specialId)
  478. } else {
  479. keyword3 = "文章未通过审核,点击查看驳回原因"
  480. redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_CENTER
  481. }
  482. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  483. openIdArr := make([]string, 0)
  484. for _, v := range openIdList {
  485. openIdArr = append(openIdArr, v.OpenId)
  486. }
  487. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  488. sendInfo := new(SendWxCategoryTemplate)
  489. sendInfo.Keywords = keywords
  490. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdCompanyApprovalMessageRai
  491. sendInfo.RedirectTarget = 4
  492. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  493. sendInfo.OpenIdArr = openIdArr
  494. sendInfo.RedirectUrl = redirectUrl
  495. err = SendCategoryTemplateMsg(sendInfo)
  496. if err != nil {
  497. return
  498. }
  499. return
  500. }
  501. // 研选专栏有新内容审核通过时,给关注此专栏的客户发送模板消息
  502. func SendWxCategoryMsgSpecialFollow(specialId int) (err error) {
  503. defer func() {
  504. if err != nil {
  505. go utils.SendAlarmMsg(fmt.Sprint("研选专栏有新内容审核通过时,给关注此专栏的客户发送类目模板消息失败", specialId, ", specialId", err.Error()), 2)
  506. }
  507. }()
  508. var keyword1 string
  509. var keyword2 string
  510. var keyword3 string
  511. var keyword4 string
  512. followers, e := models.GetYanxuanSpecialFollowUserById(specialId)
  513. if e != nil {
  514. err = errors.New("GetYanxuanSpecialFollowUserById, Err: " + e.Error())
  515. return
  516. }
  517. if len(followers) == 0 {
  518. return
  519. }
  520. specialItem, e := models.GetYanxuanSpecialItemById(specialId)
  521. if e != nil {
  522. err = errors.New("GetYanxuanSpecialFollowUserById, Err: " + e.Error())
  523. return
  524. }
  525. var allInUserId string
  526. for _, v := range followers {
  527. allInUserId += strconv.Itoa(v) + ","
  528. }
  529. allInUserId = strings.TrimRight(allInUserId, ",")
  530. userList, err := models.GetWxUserListByUserIds(allInUserId)
  531. if err != nil && err.Error() != utils.ErrNoRow() {
  532. return err
  533. }
  534. mobile := ``
  535. for _, v := range userList {
  536. mobile += v.Mobile + ","
  537. }
  538. mobile = strings.TrimRight(mobile, ",")
  539. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  540. if e != nil {
  541. err = errors.New("GetSellerByAdminId, Err: " + e.Error())
  542. return
  543. }
  544. if len(openIdList) == 0 {
  545. return
  546. }
  547. keyword1 = specialItem.SpecialName
  548. keyword2 = "发布了新报告"
  549. keyword3 = specialItem.Title
  550. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  551. openIdArr := make([]string, 0)
  552. for _, v := range openIdList {
  553. openIdArr = append(openIdArr, v.OpenId)
  554. }
  555. redirectUrl := ""
  556. redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_DETAIL + strconv.Itoa(specialId)
  557. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  558. sendInfo := new(SendWxCategoryTemplate)
  559. sendInfo.Keywords = keywords
  560. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdActivityPublishApply
  561. sendInfo.RedirectTarget = 4
  562. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  563. sendInfo.OpenIdArr = openIdArr
  564. sendInfo.RedirectUrl = redirectUrl
  565. err = SendCategoryTemplateMsg(sendInfo)
  566. if err != nil {
  567. return
  568. }
  569. return
  570. }
  571. // 文章互动相关类目模版消息
  572. func SendWxCategoryMsgInteractive(user *models.WxUserItem, interactive string, articleId int) (err error) {
  573. //30秒内阅读同一篇报告不做重复推送
  574. key := "CYGX_" + utils.CYGX_OBJ_RESEARCHSUMMARY + "_READ" + strconv.Itoa(articleId) + "_" + strconv.Itoa(user.UserId)
  575. if utils.Rc.IsExist(key) {
  576. return
  577. }
  578. utils.Rc.Put(key, 1, 30*time.Second)
  579. defer func() {
  580. if err != nil {
  581. go utils.SendAlarmMsg(fmt.Sprint("文章互动相关,类目模板消息推送 ,SendWxCategoryMsgInteractive"+err.Error(), "userId:", user.UserId, "互动类型:", interactive), 2)
  582. }
  583. }()
  584. countUser, err := models.GetUserRemind(user.UserId)
  585. if err != nil {
  586. return err
  587. }
  588. if countUser == 0 {
  589. return err
  590. }
  591. var keyword1 string
  592. var keyword2 string
  593. var keyword3 string
  594. var keyword4 string
  595. //获取销售手机号
  596. sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  597. if err != nil && err.Error() != utils.ErrNoRow() {
  598. return err
  599. }
  600. if sellerItemQy != nil {
  601. openIdList, e := models.GetWxOpenIdByMobileList(sellerItemQy.Mobile)
  602. if e != nil {
  603. err = errors.New("GetSellerByAdminId, Err: " + e.Error())
  604. return
  605. }
  606. if len(openIdList) == 0 {
  607. return
  608. }
  609. detail, e := models.GetCygxResearchSummaryInfoById(articleId)
  610. if e != nil {
  611. err = errors.New("GetCygxProductInteriorDetail, Err: " + e.Error())
  612. return
  613. }
  614. if detail == nil {
  615. return
  616. }
  617. keyword1 = user.RealName + "-" + user.CompanyName
  618. keyword1 = utils.TruncateActivityNameString(keyword1)
  619. keyword2 = fmt.Sprint("互动提醒:", interactive)
  620. keyword3 = detail.Title
  621. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  622. openIdArr := make([]string, 0)
  623. for _, v := range openIdList {
  624. openIdArr = append(openIdArr, v.OpenId)
  625. }
  626. redirectUrl := ``
  627. redirectUrl = utils.WX_MSG_PATH_YX_ARTICLE_DETAIL + strconv.Itoa(articleId)
  628. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  629. sendInfo := new(SendWxCategoryTemplate)
  630. sendInfo.Keywords = keywords
  631. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdActivityPublishApply
  632. sendInfo.RedirectTarget = 4
  633. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  634. sendInfo.OpenIdArr = openIdArr
  635. sendInfo.RedirectUrl = redirectUrl
  636. err = SendCategoryTemplateMsg(sendInfo)
  637. if err != nil {
  638. return
  639. }
  640. }
  641. return
  642. }
  643. // 用户搜索操作操作行为,类目模板消息推送
  644. func SearchKeywordUserRmindCategoryMsg(user *models.WxUserItem, keyWord string) (err error) {
  645. defer func() {
  646. if err != nil {
  647. fmt.Println(err)
  648. go utils.SendAlarmMsg(fmt.Sprint("用户搜索操作操作行为,类目模板消息推送失败"+err.Error(), "UserId:", user.UserId, "keyWord:", keyWord), 2)
  649. }
  650. }()
  651. countUser, e := models.GetUserRemind(user.UserId)
  652. if e != nil {
  653. err = errors.New("GetUserRemind, Err: " + e.Error())
  654. return
  655. }
  656. if countUser == 0 {
  657. return
  658. }
  659. var keyword1 string
  660. var keyword2 string
  661. var keyword3 string
  662. var keyword4 string
  663. //获取销售手机号
  664. sellerItemQy, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  665. if e != nil && e.Error() != utils.ErrNoRow() {
  666. err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
  667. return
  668. }
  669. if sellerItemQy != nil {
  670. openIdList, e := models.GetWxOpenIdByMobileList(sellerItemQy.Mobile)
  671. if e != nil {
  672. err = errors.New("GetSellerByAdminId, Err: " + e.Error())
  673. return
  674. }
  675. if len(openIdList) == 0 {
  676. return
  677. }
  678. keyword1 = user.RealName + "-" + user.CompanyName
  679. keyword2 = fmt.Sprint("互动提醒:搜索")
  680. keyword3 = keyWord
  681. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  682. openIdArr := make([]string, 0)
  683. for _, v := range openIdList {
  684. openIdArr = append(openIdArr, v.OpenId)
  685. }
  686. redirectUrl := ""
  687. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  688. sendInfo := new(SendWxCategoryTemplate)
  689. sendInfo.Keywords = keywords
  690. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdCompanyApprovalMessageRai
  691. sendInfo.RedirectTarget = 4
  692. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  693. sendInfo.OpenIdArr = openIdArr
  694. sendInfo.RedirectUrl = redirectUrl
  695. err = SendCategoryTemplateMsg(sendInfo)
  696. if err != nil {
  697. return
  698. }
  699. }
  700. return
  701. }
  702. // 帮我带问的问题,会前1小时发送
  703. func SendEmailFileForAskMsgResearch(cont context.Context) (err error) {
  704. var msg string
  705. //var touser string
  706. defer func() {
  707. if err != nil {
  708. go utils.SendAlarmMsg("发送附件模版消息失败", 2)
  709. go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  710. }
  711. if msg != "" {
  712. go utils.SendAlarmMsg(msg, 2)
  713. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  714. }
  715. }()
  716. endDate := time.Now().Add(+time.Minute * 60).Format(utils.FormatDateTime)
  717. condition := `AND a.activity_type_id = 1 AND a.chart_permission_id = 31 `
  718. total, err := models.GetCountActivityResearchToSendFile(condition, endDate)
  719. if total == 0 {
  720. fmt.Println("发送附件完成0")
  721. return nil
  722. }
  723. if err != nil {
  724. msg = "发送附件模版消息失败 Err:" + err.Error()
  725. return
  726. }
  727. listActivity, err := models.GetActivityResearchToSendFile(condition, endDate)
  728. if err != nil {
  729. msg = "发送附件模版消息失败 Err:" + err.Error()
  730. return
  731. }
  732. for _, v := range listActivity {
  733. activityInfo, _ := models.GetAddActivityInfoById(v.ActivityId)
  734. if activityInfo == nil {
  735. msg = "活动不存在,Err:activityId:" + strconv.Itoa(v.ActivityId)
  736. return
  737. }
  738. list, errFile := models.GetActivityMsgExport(v.ActivityId)
  739. if errFile != nil {
  740. msg = "获取失败,Err:" + errFile.Error()
  741. return
  742. }
  743. for _, v2 := range list {
  744. user, e := models.GetWxUserItemByUserId(v2.UserId)
  745. if e != nil && e.Error() != utils.ErrNoRow() {
  746. err = errors.New("GetWxUserItemByUserId, Err: " + e.Error())
  747. return err
  748. }
  749. //获取销售信息
  750. sellerItem, e := models.GetSellerByCompanyIdCheckFicc(v2.CompanyId, 2)
  751. if e != nil && e.Error() != utils.ErrNoRow() {
  752. err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
  753. return
  754. }
  755. //给所属销售推送消息
  756. if sellerItem != nil && user != nil {
  757. openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
  758. openIdList := make([]*models.OpenIdList,0)
  759. openIdList = append(openIdList, openIpItem)
  760. SendWxCategoryMsgWithActivityAsk(user.CompanyName, user.RealName, sellerItem.RealName, time.Now().Format(utils.FormatDateTimeMinute2), v2.Content, openIdList, v2.AskId)
  761. }
  762. }
  763. errFile = models.UPdateActivityMsgToSendFile(v.ActivityId)
  764. if errFile != nil {
  765. msg = "获取失败,Err:" + errFile.Error()
  766. return
  767. }
  768. }
  769. return
  770. }
  771. // 发送报告提问消息提醒
  772. func SendWxCategoryMsgWithActivityAsk(companyName, realName, sellerName, askTime, askMsg string, openIdList []*models.OpenIdList, msgId int) (err error) {
  773. if len(openIdList) == 0 {
  774. return
  775. }
  776. var msg string
  777. defer func() {
  778. if err != nil {
  779. go utils.SendEmail("发送类目模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  780. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒类目模版消息失败,用户名", realName, "留言ID:", msgId), 2)
  781. utils.FileLog.Info("发送类目模版消息失败,Err:%s", err.Error())
  782. }
  783. fmt.Println("line 21", err, msg)
  784. }()
  785. var keyword1 string
  786. var keyword2 string
  787. var keyword3 string
  788. var keyword4 string
  789. var keyword5 string
  790. keyword1 = realName
  791. keyword2 = companyName
  792. keyword3 = sellerName
  793. keyword4 = askTime
  794. keyword5 = utils.TruncateActivityNameString("活动提问:" + askMsg)
  795. keywords := []string{keyword1, keyword2, keyword3, keyword4, keyword5}
  796. openIdArr := make([]string, 0)
  797. for _, v := range openIdList {
  798. openIdArr = append(openIdArr, v.OpenId)
  799. }
  800. redirectUrl := utils.WX_MSG_PATH_YX_ACTIVITY_DETAIL + strconv.Itoa(msgId)
  801. sendInfo := new(SendWxCategoryTemplate)
  802. sendInfo.Keywords = keywords
  803. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  804. sendInfo.RedirectTarget = 4
  805. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  806. sendInfo.OpenIdArr = openIdArr
  807. sendInfo.RedirectUrl = redirectUrl
  808. err = SendCategoryTemplateMsg(sendInfo)
  809. if err != nil {
  810. return
  811. }
  812. return
  813. }
  814. // 推送会议开始消息提醒60分钟前
  815. func SendActivityBeginMsg(cont context.Context) (err error) {
  816. //func SendActivityBeginMsg() (err error) {
  817. defer func() {
  818. if err != nil {
  819. go utils.SendAlarmMsg("60分钟会议消息提醒失败"+err.Error(), 2)
  820. fmt.Println("发送失败,Err:", err.Error())
  821. }
  822. }()
  823. endDate := time.Now().Add(+time.Minute * 60).Format(utils.FormatDateTime)
  824. listActivity, err := models.GetYxActivitySendMsgListAll(endDate)
  825. fmt.Println(len(listActivity))
  826. if err != nil {
  827. fmt.Println("GetActivitySendMsgListAll Err:", err.Error())
  828. return
  829. }
  830. if len(listActivity) == 0 {
  831. return
  832. }
  833. //var remark = "点击查看活动详情"
  834. var signupIds string
  835. for _, v := range listActivity {
  836. signupIds += strconv.Itoa(v.Id) + ","
  837. //var reserveResults string
  838. //var first string
  839. openIdItem := new(models.OpenIdList)
  840. openIdItem.OpenId = v.OpenId
  841. openIdItem.UserId = v.UserId
  842. openIdList := make([]*models.OpenIdList, 0)
  843. openIdList = append(openIdList, openIdItem)
  844. openIdArr := make([]string, 0)
  845. for _, v := range openIdList {
  846. openIdArr = append(openIdArr, v.OpenId)
  847. }
  848. keywords := []string{v.ActivityName, v.ActivityTime}
  849. sendInfo := new(SendWxCategoryTemplate)
  850. sendInfo.Keywords = keywords
  851. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdArticleUserRemind
  852. sendInfo.RedirectTarget = 4
  853. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  854. sendInfo.OpenIdArr = openIdArr
  855. sendInfo.RedirectUrl = utils.WX_MSG_PATH_YX_ACTIVITY_DETAIL + strconv.Itoa(v.ActivityId)
  856. err = SendCategoryTemplateMsg(sendInfo)
  857. if err != nil {
  858. return
  859. }
  860. }
  861. if len(signupIds) == 0 {
  862. return
  863. }
  864. signupIds = strings.TrimRight(signupIds, ",")
  865. err = models.UPdateSendedMsgStatus(signupIds)
  866. if err != nil {
  867. var msg string
  868. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  869. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  870. }
  871. return
  872. }
  873. // 推送会议开始消息提醒15分钟前
  874. func SendActivityBeginMsgMeeting(cont context.Context) (err error) {
  875. //func SendActivityBeginMsgMeeting() (err error) {
  876. defer func() {
  877. if err != nil {
  878. go utils.SendAlarmMsg("15分钟会议消息提醒失败", 2)
  879. fmt.Println("发送失败,Err:", err.Error())
  880. }
  881. }()
  882. var condition string
  883. var pars []interface{}
  884. endDate := time.Now().Add(+time.Minute * 15).Format(utils.FormatDateTime)
  885. condition = ` AND activity_time <= ? AND activity_time >= NOW() AND publish_status = 1 `
  886. pars = append(pars, endDate)
  887. listActivity, e := models.GetCygxActivityList(condition, pars, 0, 100000)
  888. if e != nil && e.Error() != utils.ErrNoRow() {
  889. err = errors.New("GetCygxActivityList, Err: " + e.Error())
  890. return
  891. }
  892. if len(listActivity) == 0 {
  893. return
  894. }
  895. //var signupIds string
  896. //var remark = "点击查看活动详情"
  897. var activityIds []int
  898. //同一时间举办的活动不多所以这里循环查询
  899. for _, v := range listActivity {
  900. activityIds = append(activityIds, v.ActivityId)
  901. var mobiles []string
  902. pars = make([]interface{}, 0)
  903. condition = ` AND activity_id = ? AND is_send_wx_msg = 0 `
  904. pars = append(pars, v.ActivityId)
  905. //获取设置消息提醒的用户列表
  906. listxReminder, e := models.GetCygxReminderListByUser(condition, pars)
  907. if e != nil {
  908. err = errors.New("GetCygxReminderListByUser, Err: " + e.Error())
  909. return
  910. }
  911. for _, vReminder := range listxReminder {
  912. mobiles = append(mobiles, vReminder.Mobile)
  913. }
  914. pars = make([]interface{}, 0)
  915. condition = ` AND do_fail_type = 0 AND activity_id = ? AND signup_type = 1 AND is_send_wx_msg = 0 `
  916. pars = append(pars, v.ActivityId)
  917. //获取设置预约外呼的用户列表
  918. listSignup, e := models.GetActivitySignupList(condition, pars)
  919. if e != nil && e.Error() != utils.ErrNoRow() {
  920. err = errors.New("GetActivitySignupList, Err: " + e.Error())
  921. return
  922. }
  923. for _, vSignup := range listSignup {
  924. mobiles = append(mobiles, vSignup.Mobile)
  925. }
  926. //获取这些手机号对应的Openid
  927. listOpenid, e := models.GetUserRecordListByMobileArr(mobiles)
  928. if e != nil && e.Error() != utils.ErrNoRow() {
  929. err = errors.New("GetUserRecordListByMobileArr, Err: " + e.Error())
  930. return
  931. }
  932. openIdList := make([]*models.OpenIdList, 0)
  933. for _, vOpenid := range listOpenid {
  934. openIdItem := new(models.OpenIdList)
  935. openIdItem.OpenId = vOpenid.OpenId
  936. openIdItem.UserId = vOpenid.UserId
  937. openIdList = append(openIdList, openIdItem)
  938. }
  939. openIdArr := make([]string, 0)
  940. for _, v := range openIdList {
  941. openIdArr = append(openIdArr, v.OpenId)
  942. }
  943. keywords := []string{v.ActivityName, v.ActivityTime}
  944. sendInfo := new(SendWxCategoryTemplate)
  945. sendInfo.Keywords = keywords
  946. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdArticleUserRemind
  947. sendInfo.RedirectTarget = 4
  948. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  949. sendInfo.OpenIdArr = openIdArr
  950. //sendInfo.RedirectUrl = redirectUrl
  951. err = SendCategoryTemplateMsg(sendInfo)
  952. if err != nil {
  953. return
  954. }
  955. }
  956. err = models.UpdateSendedMsgMeetingSendWxMsg(activityIds)
  957. return
  958. }