package handler import ( "GtDataStore/app/cmd/organization/internal/logic/job" "GtDataStore/app/cmd/organization/internal/svc" "GtDataStore/app/model" "context" "github.com/zeromicro/go-zero/core/logx" "sync" "time" ) func DeviceRo(ctx context.Context, task *job.Task, technologyName string) error { // 1. 查询所有的设备 devices, err := findDeviceRo(task.Job.SvcCtx, int64(task.Id)) if err != nil { return err } // 2. 获得点位信息 var wg sync.WaitGroup wg.Add(len(devices)) for _, device := range devices { device := device go func() { defer wg.Done() if err := device.Items.FillCurrentValue(); err != nil { logx.Errorf("DeviceRo device.Items.FillCurrentValue error: %s", err.Error()) } }() } wg.Wait() // 3. 转换为存储对象 workings, err := transDeviceRoData(devices) if err != nil { return err } // 4. 批量入库 if _, err := task.Job.SvcCtx.WorkingRo.MultiInsert(context.Background(), workings); err != nil { logx.Errorf("DeviceRo task.Job.SvcCtx.WorkingRo.MultiInsert error: %s", err.Error()) } return nil } func findDeviceRo(svcCtx *svc.ServiceContext, projectId int64) ([]model.DcDeviceBind, error) { if devices, err := svcCtx.DeviceBind.FindByProjectIdDeviceType(context.Background(), projectId, DEVICE_RO); err != nil { logx.Infof("findDeviceRo not found devices") return nil, err } else { return devices, nil } } func transDeviceRoData(datas []model.DcDeviceBind) ([]model.DcWorkingRo, error) { ts := make([]model.DcWorkingRo, len(datas)) for i, data := range datas { ts[i] = model.DcWorkingRo{ Id: 0, ProjectId: data.ProjectId, DeviceCode: data.DeviceCode, WaterTemperature: data.Items.GetItemFloat64Value("water_temperature"), FeedFlow1St: data.Items.GetItemFloat64Value("water_temperature"), ConFlow1St: data.Items.GetItemFloat64Value("water_temperature"), ProductFlow1St: data.Items.GetItemFloat64Value("water_temperature"), FeedPressure1St: data.Items.GetItemFloat64Value("water_temperature"), ConPressure1St: data.Items.GetItemFloat64Value("water_temperature"), ProductPressure1St: data.Items.GetItemFloat64Value("water_temperature"), Tmp1St: data.Items.GetItemFloat64Value("water_temperature"), Flux1St: data.Items.GetItemFloat64Value("water_temperature"), Permeability1St: data.Items.GetItemFloat64Value("water_temperature"), FeedFlow2Nd: data.Items.GetItemFloat64Value("water_temperature"), ConFlow2Nd: data.Items.GetItemFloat64Value("water_temperature"), ProductFlow2Nd: data.Items.GetItemFloat64Value("water_temperature"), FeedPressure2Nd: data.Items.GetItemFloat64Value("water_temperature"), ConPressure2Nd: data.Items.GetItemFloat64Value("water_temperature"), ProductPressure2Nd: data.Items.GetItemFloat64Value("water_temperature"), Tmp2Nd: data.Items.GetItemFloat64Value("water_temperature"), Flux2Nd: data.Items.GetItemFloat64Value("water_temperature"), Permeability2Nd: data.Items.GetItemFloat64Value("water_temperature"), FeedFlow3Th: data.Items.GetItemFloat64Value("water_temperature"), ConFlow3Th: data.Items.GetItemFloat64Value("water_temperature"), ProductFlow3Th: data.Items.GetItemFloat64Value("water_temperature"), FeedPressure3Th: data.Items.GetItemFloat64Value("water_temperature"), ConPressure3Th: data.Items.GetItemFloat64Value("water_temperature"), ProductPressure3Th: data.Items.GetItemFloat64Value("water_temperature"), Tmp3Th: data.Items.GetItemFloat64Value("water_temperature"), Flux3Th: data.Items.GetItemFloat64Value("water_temperature"), Permeability3Th: data.Items.GetItemFloat64Value("water_temperature"), FeedWqTurbidity: data.Items.GetItemFloat64Value("feed_wq_turbidity"), FeedWqPh: data.Items.GetItemInt64Value("feed_wq_ph"), ProductWqPh: data.Items.GetItemInt64Value("product_wq_ph"), FeedWqAl: data.Items.GetItemFloat64Value("feed_wq_al"), ProductWqAl: data.Items.GetItemFloat64Value("product_wq_al"), FeedWqFe: data.Items.GetItemFloat64Value("feed_wq_fe"), ProductWqFe: data.Items.GetItemFloat64Value("product_wq_fe"), FeedWqMn: data.Items.GetItemFloat64Value("feed_wq_mn"), ProductWqMn: data.Items.GetItemFloat64Value("product_wq_mn"), FeedWqSio2: data.Items.GetItemFloat64Value("feed_wq_sio2"), ProductWqSio2: data.Items.GetItemFloat64Value("product_wq_sio2"), FeedWqCod: data.Items.GetItemFloat64Value("feed_wq_cod"), ProductWqCod: data.Items.GetItemFloat64Value("product_wq_cod"), FeedWqP: data.Items.GetItemFloat64Value("feed_wq_p"), ProductWqP: data.Items.GetItemFloat64Value("product_wq_p"), Step: data.Items.GetItemInt64Value("step"), CTime: time.Now(), } } return ts, nil }