Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

119 lines
2.9KB

  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "strings"
  6. )
  7. type procSearchMemberDef struct {
  8. chatProcedureID
  9. }
  10. var procSearchMember = procSearchMemberDef{}
  11. func (m *procSearchMemberDef) init(ss *openIDSessionData) {
  12. ss.Procedure = m.getID()
  13. ss.refreshExpire(600)
  14. }
  15. func (m *procSearchMemberDef) clean(ss *openIDSessionData) {
  16. ss.Procedure = ""
  17. }
  18. func (m *procSearchMemberDef) start(ss *openIDSessionData, in *InWechatMsg) {
  19. }
  20. func (m *procSearchMemberDef) serve(ss *openIDSessionData, in *InWechatMsg) (processed bool) {
  21. switch msg := in.body.(type) {
  22. case TextMsg:
  23. if m.endingCommand(ss, msg.Content) {
  24. return
  25. }
  26. str, _ := BuildTextMsg(ss.OpenID, "搜索 "+msg.Content+"... ...")
  27. in.replyXML(str)
  28. m.displayUserInfo(ss, msg.Content)
  29. processed = true
  30. case PicMsg:
  31. //str := buildPicMsg(ss.OpenID, msg.MediaId)
  32. in.transfer2KF()
  33. kfSendPicByMediaID(ss.OpenID, msg.MediaId)
  34. kfSendTxt(ss.OpenID, "已转接校友会理事会,稍后答复您")
  35. processed = true
  36. case VoiceMsg:
  37. name := strings.TrimSuffix(msg.Recognition, "。")
  38. str, _ := BuildTextMsg(ss.OpenID, "搜索 "+name+"... ...")
  39. in.replyXML(str)
  40. m.displayUserInfo(ss, name)
  41. processed = true
  42. case EventMsg:
  43. processed = true
  44. if msg.Event == "LOCATION" {
  45. onLocation(in)
  46. }
  47. if msg.Event == "CLICK" {
  48. processed = false //we might need to process other menu command.
  49. }
  50. default:
  51. str := fmt.Sprintf("搜索功能结束")
  52. kfSendTxtAs(ss.OpenID, str, "孙鹏")
  53. processed = false
  54. }
  55. return
  56. }
  57. func (m *procSearchMemberDef) summary(ss *openIDSessionData) {
  58. }
  59. func (m *procSearchMemberDef) intro(ss *openIDSessionData, in *InWechatMsg) {
  60. msg := "请输入(读出)他/她的姓名或者照片"
  61. in.replyText("")
  62. kfSendTxtAs(ss.OpenID, msg, "孙鹏")
  63. }
  64. func (m *procSearchMemberDef) displayUserInfo(ss *openIDSessionData, name string) {
  65. total, list, err := crmFindEntityByAttr("Lead", "lastName", name)
  66. if total <= 0 || err != nil {
  67. kfSendTxtAs(ss.OpenID, "很抱歉,没有找到相关信息", "孙鹏")
  68. return
  69. }
  70. search, ok := list.([]crmdLead)
  71. if !ok {
  72. log.Printf("ERROR: 搜索 %s 结果异常, total=%d, ", name, total)
  73. kfSendTxt(ss.OpenID, "很抱歉,没有找到相关信息")
  74. return
  75. }
  76. for _, v := range search {
  77. articles := []sendNewsArticle{}
  78. //main photo
  79. articles = append(articles, v.getBasicUserInfoPhoto())
  80. //email
  81. articles = append(articles, v.getBasicUserInfoEmail())
  82. //phone
  83. articles = append(articles, v.getBasicUserInfoPhone())
  84. kfSendNews(ss.OpenID, "总标题", "总描述", articles)
  85. if v.Description != "" {
  86. msg := fmt.Sprintf("%s简介:%s\n", name, v.Description)
  87. kfSendTxtAs(ss.OpenID, msg, "孙鹏")
  88. }
  89. }
  90. ss.refreshExpire(600)
  91. }
  92. func (m *procSearchMemberDef) endingCommand(ss *openIDSessionData, cmd string) (stop bool) {
  93. stop = false
  94. if cmd == "结束" || cmd == "." || cmd == "。" {
  95. stop = true
  96. m.clean(ss)
  97. str := fmt.Sprintf("搜索功能结束")
  98. kfSendTxtAs(ss.OpenID, str, "孙鹏")
  99. }
  100. return
  101. }