NatsWx.go 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package NatsServer
  2. import (
  3. "Cold_DeductionNotice/lib"
  4. "Cold_DeductionNotice/logs"
  5. "Cold_DeductionNotice/models/Warning"
  6. "github.com/vmihailenco/msgpack/v5"
  7. "strconv"
  8. "strings"
  9. "time"
  10. )
  11. func Wx_MessageTemplate(Warning_r *Warning.Warning, openid string, templateid string, reqdata string) {
  12. logs.Println(" => Nats", lib.FuncName(), openid, templateid, reqdata)
  13. type Wx_MessageTemplate struct {
  14. Openid string
  15. Templateid string
  16. Parameter string
  17. Reqdata string
  18. }
  19. b, err := msgpack.Marshal(&Wx_MessageTemplate{
  20. Openid: openid,
  21. Templateid: templateid,
  22. Parameter: "index?wid=" + strconv.Itoa(Warning_r.T_id),
  23. Reqdata: reqdata,
  24. })
  25. if err != nil {
  26. logs.Println("Wx_MessageTemplate", err)
  27. return
  28. }
  29. cun_x := 0
  30. Data := ""
  31. breakHere:
  32. cun_x++
  33. // 控制发送
  34. if cun_x > 3 {
  35. // 添加
  36. Warning_r_e := Warning.Warning{}
  37. Warning_r_e.T_pid = 0
  38. Warning_r_e.T_tp = 1012
  39. Warning_r_e.T_D_name = "微信服务通讯"
  40. Warning_r_e.T_Remark = "微信服务通讯 异常!"
  41. Warning_r_e.T_Log = Data
  42. Warning_r_e.T_State = 3
  43. Warning_r_e.T_Ut = time.Now()
  44. //WarningNotice.WarningToAdminId(&Warning_r_e, []int{1}) // 发送给 绑定公司管理员
  45. // 添加报警
  46. Warning.Add_Warning(Warning_r_e)
  47. logs.PrintlnError("微信通知","微信服务通讯 异常!")
  48. // 达到数量上线跳出
  49. return
  50. }
  51. // 请求-响应, 向 test3 发布一个 `help me` 请求数据,设置超时间3秒,如果有多个响应,只接收第一个收到的消息
  52. msg, err := lib.Nats.Request("Wx_MessageTemplate", b, 3*time.Second)
  53. if err != nil {
  54. logs.PrintlnError("Wx_MessageTemplate %s", err.Error())
  55. Warning.Add_Warning_Log(Warning_r, "---->微信服务通讯 异常!Nats Err!尝试发送 "+strconv.Itoa(cun_x)+" 次\n")
  56. Data = "微信服务通讯 异常!Nats Err!"
  57. time.Sleep(time.Second * time.Duration(cun_x))
  58. goto breakHere // 跳转到标签
  59. }
  60. Data = string(msg.Data)
  61. logs.Println("Wx_MessageTemplate => : %s\n", Data)
  62. if !strings.Contains(Data, "成功"){
  63. Warning.Add_Warning_Log(Warning_r, "---->微信服务发送失败!["+Data+"]!尝试发送 "+strconv.Itoa(cun_x)+" 次\n")
  64. time.Sleep(time.Second * time.Duration(cun_x))
  65. goto breakHere // 跳转到标签
  66. }
  67. Warning.Add_Warning_Log(Warning_r, "->"+Data+"\n")
  68. // ============== 计费 ==============
  69. Warning.Add_WarningSand(Warning.WarningSand{
  70. T_pid: Warning_r.T_pid,
  71. T_tp: Warning_r.T_tp,
  72. T_Notice: openid,
  73. T_Ntype: 0,
  74. T_Remark: "WID:"+strconv.FormatInt(Warning_r.Id,10)+"\n" +
  75. "类型:"+Warning.Read_WarningType_Get(Warning_r.T_tp)+"\n"+
  76. "SN:"+Warning_r.T_sn+"\n"+
  77. "主机:"+Warning_r.T_D_name+"\n"+
  78. "设备:"+Warning_r.T_DS_name+"\n"+
  79. "备注:"+Warning_r.T_Remark+"\n"+
  80. "通知方式:短信通知\n"+
  81. "通知对象:"+openid,
  82. })
  83. }