You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

120 line
3.0KB

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