wx_category_template_msg.go 35 KB

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