program.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package devices
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "server/dao"
  6. "server/global"
  7. "server/model/devices"
  8. "server/utils/protocol"
  9. "time"
  10. )
  11. type ProgramService struct {
  12. }
  13. func (ps *ProgramService) CreateProgram(ref devices.ProgramReq) error {
  14. contentList := []devices.SetDisContent{
  15. {ref.Program.Num1, ref.Program.Effect1, ref.Program.Speed1, ref.Program.Stay1, ref.Program.Total1, ref.Program.Color1, ref.Program.Content1},
  16. {ref.Program.Num2, ref.Program.Effect2, ref.Program.Speed2, ref.Program.Stay2, ref.Program.Total2, ref.Program.Color2, ref.Program.Content2},
  17. {ref.Program.Num3, ref.Program.Effect3, ref.Program.Speed3, ref.Program.Stay3, ref.Program.Total3, ref.Program.Color3, ref.Program.Content3},
  18. {ref.Program.Num4, ref.Program.Effect4, ref.Program.Speed4, ref.Program.Stay4, ref.Program.Total4, ref.Program.Color4, ref.Program.Content4},
  19. {ref.Program.Num5, ref.Program.Effect5, ref.Program.Speed5, ref.Program.Stay5, ref.Program.Total5, ref.Program.Color5, ref.Program.Content5},
  20. }
  21. for _, p := range contentList {
  22. // 组装成每个对象
  23. result := map[string]map[string]string{
  24. "setdiscontent0": {
  25. "num": p.Num,
  26. "effect": p.Effect,
  27. "speed": p.Speed,
  28. "stay": p.Stay,
  29. "total": p.Total,
  30. "color": p.Color,
  31. "content": p.Content,
  32. },
  33. }
  34. // 序列化为 JSON 字符串
  35. jsonBytes, err := json.MarshalIndent(result, "", " ")
  36. if err != nil {
  37. return fmt.Errorf("转换失败: %v", err)
  38. }
  39. err = MqttService.Publish(MqttService.GetTopic(ref.DeviceSn, protocol.TopicSetControl), jsonBytes)
  40. time.Sleep(300 * time.Millisecond)
  41. if err != nil {
  42. return fmt.Errorf("error updating: %v", err)
  43. }
  44. }
  45. err := global.GVA_DB.Create(&ref.Program).Error
  46. if err != nil {
  47. return err
  48. }
  49. fmt.Println("Program CreateProgram === ", ref.Program)
  50. err = global.GVA_DB.Model(dao.Screens{}).Where("sn = ?", ref.DeviceSn).Update("program_id", ref.Program.ID).Error
  51. if err != nil {
  52. return err
  53. }
  54. return err
  55. }
  56. func (ps *ProgramService) UpdateProgram(ref devices.ProgramReq) error {
  57. contentList := []devices.SetDisContent{
  58. {ref.Program.Num1, ref.Program.Effect1, ref.Program.Speed1, ref.Program.Stay1, ref.Program.Total1, ref.Program.Color1, ref.Program.Content1},
  59. {ref.Program.Num2, ref.Program.Effect2, ref.Program.Speed2, ref.Program.Stay2, ref.Program.Total2, ref.Program.Color2, ref.Program.Content2},
  60. {ref.Program.Num3, ref.Program.Effect3, ref.Program.Speed3, ref.Program.Stay3, ref.Program.Total3, ref.Program.Color3, ref.Program.Content3},
  61. {ref.Program.Num4, ref.Program.Effect4, ref.Program.Speed4, ref.Program.Stay4, ref.Program.Total4, ref.Program.Color4, ref.Program.Content4},
  62. {ref.Program.Num5, ref.Program.Effect5, ref.Program.Speed5, ref.Program.Stay5, ref.Program.Total5, ref.Program.Color5, ref.Program.Content5},
  63. }
  64. for _, p := range contentList {
  65. // 组装成每个对象
  66. result := map[string]map[string]string{
  67. "setdiscontent0": {
  68. "num": p.Num,
  69. "effect": p.Effect,
  70. "speed": p.Speed,
  71. "stay": p.Stay,
  72. "total": p.Total,
  73. "color": p.Color,
  74. "content": p.Content,
  75. },
  76. }
  77. // 序列化为 JSON 字符串
  78. jsonBytes, err := json.MarshalIndent(result, "", " ")
  79. if err != nil {
  80. return fmt.Errorf("转换失败: %v", err)
  81. }
  82. err = MqttService.Publish(MqttService.GetTopic(ref.DeviceSn, protocol.TopicSetControl), jsonBytes)
  83. time.Sleep(300 * time.Millisecond)
  84. if err != nil {
  85. return fmt.Errorf("error updating: %v", err)
  86. }
  87. }
  88. return ref.Program.UpdateProgram()
  89. }