uf.go 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package handler
  2. import (
  3. "GtDataStore/app/cmd/organization/internal/logic/job"
  4. "GtDataStore/app/cmd/organization/internal/svc"
  5. "GtDataStore/app/model"
  6. "context"
  7. "github.com/zeromicro/go-zero/core/logx"
  8. "time"
  9. )
  10. func DeviceUf(ctx context.Context, task *job.Task, technologyName string) error {
  11. // 1. 查询所有的设备
  12. devices, err := findDeviceUf(task.Job.SvcCtx, int64(task.Id))
  13. if err != nil {
  14. return err
  15. }
  16. // 2. 获得点位信息
  17. //var wg sync.WaitGroup
  18. //wg.Add(len(devices))
  19. //for _, device := range devices {
  20. // device := device
  21. // go func() {
  22. // defer wg.Done()
  23. // if err := device.Items.FillCurrentValue(); err != nil {
  24. // logx.Errorf("DeviceUf device.Items.FillCurrentValue error: %s", err.Error())
  25. // }
  26. // }()
  27. //}
  28. //
  29. //wg.Wait()
  30. // 3. 转换为存储对象
  31. workings, err := transDeviceUfData(devices)
  32. if err != nil {
  33. return err
  34. }
  35. // 4. 批量入库
  36. if _, err := task.Job.SvcCtx.WorkingUf.MultiInsert(context.Background(), workings); err != nil {
  37. logx.Errorf("DeviceUf task.Job.SvcCtx.WorkingUf.MultiInsert error: %s", err.Error())
  38. }
  39. return nil
  40. }
  41. func findDeviceUf(svcCtx *svc.ServiceContext, projectId int64) ([]model.DcDeviceBind, error) {
  42. if data := deviceBindCacheTable.GetCache(DEVICE_UF); data != nil {
  43. return data, nil
  44. }
  45. if devices, err := svcCtx.DeviceBind.FindByProjectIdDeviceType(context.Background(), projectId, DEVICE_UF); err != nil {
  46. logx.Infof("findDeviceUf not found devices")
  47. return nil, err
  48. } else {
  49. deviceBindCacheTable.SetCache(DEVICE_UF, devices, time.Now().Add(300*time.Second))
  50. return devices, nil
  51. }
  52. }
  53. func transDeviceUfData(datas []model.DcDeviceBind) ([]model.DcWorkingUf, error) {
  54. ts := make([]model.DcWorkingUf, len(datas))
  55. for i, data := range datas {
  56. ts[i] = model.DcWorkingUf{
  57. ProjectId: data.ProjectId,
  58. DeviceCode: data.DeviceCode,
  59. WaterTemperature: data.Items.GetItemFloat64Value("water_temperature"),
  60. FeedFlow: data.Items.GetItemFloat64Value("feed_flow"),
  61. ConFlow: data.Items.GetItemFloat64Value("con_flow"),
  62. ProductFlow: data.Items.GetItemFloat64Value("product_flow"),
  63. FeedPressure: data.Items.GetItemFloat64Value("feed_pressure"),
  64. ConPressure: data.Items.GetItemFloat64Value("con_pressure"),
  65. ProductPressure: data.Items.GetItemFloat64Value("product_pressure"),
  66. Tmp: data.Items.GetItemFloat64Value("tmp"),
  67. Flux: data.Items.GetItemFloat64Value("flux"),
  68. FeedWqTurbidity: data.Items.GetItemFloat64Value("feed_wq_turbidity"),
  69. FeedWqPh: data.Items.GetItemInt64Value("feed_wq_ph"),
  70. ProductWqPh: data.Items.GetItemInt64Value("product_wq_ph"),
  71. FeedWqAl: data.Items.GetItemFloat64Value("feed_wq_al"),
  72. ProductWqAl: data.Items.GetItemFloat64Value("product_wq_al"),
  73. FeedWqFe: data.Items.GetItemFloat64Value("feed_wq_fe"),
  74. ProductWqFe: data.Items.GetItemFloat64Value("product_wq_fe"),
  75. FeedWqMn: data.Items.GetItemFloat64Value("feed_wq_mn"),
  76. ProductWqMn: data.Items.GetItemFloat64Value("product_wq_mn"),
  77. FeedWqSio2: data.Items.GetItemFloat64Value("feed_wq_sio2"),
  78. ProductWqSio2: data.Items.GetItemFloat64Value("product_wq_sio2"),
  79. FeedWqCod: data.Items.GetItemFloat64Value("feed_wq_cod"),
  80. ProductWqCod: data.Items.GetItemFloat64Value("product_wq_cod"),
  81. FeedWqP: data.Items.GetItemFloat64Value("feed_wq_p"),
  82. ProductWqP: data.Items.GetItemFloat64Value("product_wq_p"),
  83. Step: data.Items.GetItemInt64Value("step"),
  84. FilterTime: data.Items.GetItemFloat64Value("filter_time"),
  85. FilterCycle: data.Items.GetItemInt64Value("filter_cycle"),
  86. CTime: time.Now(),
  87. }
  88. }
  89. return ts, nil
  90. }