pump.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. "sync"
  9. "time"
  10. )
  11. func DevicePump(ctx context.Context, task *job.Task, technologyName string) error {
  12. // 1. 查询所有的设备
  13. devices, err := findDevicePump(task.Job.SvcCtx, int64(task.Id))
  14. if err != nil {
  15. return err
  16. }
  17. // 2. 获得点位信息
  18. var wg sync.WaitGroup
  19. wg.Add(len(devices))
  20. for _, device := range devices {
  21. device := device
  22. go func() {
  23. defer wg.Done()
  24. if err := device.Items.FillCurrentValue(); err != nil {
  25. logx.Errorf("DevicePump device.Items.FillCurrentValue error: %s", err.Error())
  26. }
  27. }()
  28. }
  29. wg.Wait()
  30. // 3. 转换为存储对象
  31. workings, err := transDevicePumpData(devices)
  32. if err != nil {
  33. return err
  34. }
  35. // 4. 批量入库
  36. if _, err := task.Job.SvcCtx.WorkingPump.MultiInsert(context.Background(), workings); err != nil {
  37. logx.Errorf("DevicePump task.Job.SvcCtx.WorkingPump.MultiInsert error: %s", err.Error())
  38. }
  39. return nil
  40. }
  41. func findDevicePump(svcCtx *svc.ServiceContext, projectId int64) ([]model.DcDeviceBind, error) {
  42. if devices, err := svcCtx.DeviceBind.FindByProjectIdDeviceType(context.Background(), projectId, DEVICE_PUMP); err != nil {
  43. logx.Infof("findDevicePump not found devices")
  44. return nil, err
  45. } else {
  46. return devices, nil
  47. }
  48. }
  49. func transDevicePumpData(datas []model.DcDeviceBind) ([]model.DcWorkingPump, error) {
  50. ts := make([]model.DcWorkingPump, len(datas))
  51. for i, data := range datas {
  52. ts[i] = model.DcWorkingPump{
  53. ProjectId: data.ProjectId,
  54. DeviceCode: data.DeviceCode,
  55. FeedPressure: data.Items.GetItemFloat64Value("feed_pressure"),
  56. OutPressure: data.Items.GetItemFloat64Value("out_pressure"),
  57. Duration: data.Items.GetItemInt64Value("duration"),
  58. Current: data.Items.GetItemFloat64Value("current"),
  59. Frequency: data.Items.GetItemFloat64Value("frequency"),
  60. Lift: data.Items.GetItemFloat64Value("lift"),
  61. Efficiency: data.Items.GetItemFloat64Value("efficiency"),
  62. RunStatus: data.Items.GetItemInt64Value("run_status"),
  63. FaultStatus: data.Items.GetItemInt64Value("fault_status"),
  64. CTime: time.Now(),
  65. }
  66. }
  67. return ts, nil
  68. }