diff --git a/service/meter04kv.go b/service/meter04kv.go index b4a3cee..7b08c70 100644 --- a/service/meter04kv.go +++ b/service/meter04kv.go @@ -175,7 +175,7 @@ func (m _Meter04kVService) BatchCreateMeter(meters []model.Meter04KV) error { } parkId, _ := parkIds.Pop() - ctx, cancel := global.TimeoutContext() + ctx, cancel := global.TimeoutContext(120) defer cancel() allMeterCodes := make([]string, 0) @@ -193,14 +193,31 @@ func (m _Meter04kVService) BatchCreateMeter(meters []model.Meter04KV) error { return err } + var ( + updates = make([]model.Meter04KV, 0) + inserts = make([]model.Meter04KV, 0) + ) for _, meter := range meters { - var err error if meterCodes.Contains(meter.Code) { - err = m.updateMeter(&tx, &ctx, meter) + updates = append(updates, meter) } else { - err = m.insertNewMeter(&tx, &ctx, meter) + inserts = append(inserts, meter) } + } + if len(updates) > 0 { + _, err = tx.NewUpdate().Model(&updates). + Column("address", "customer_name", "contact_name", "contact_phone", "ratio", "seq", "public_meter", "dilute", "enabled"). + Bulk(). + Exec(ctx) if err != nil { + tx.Rollback() + return err + } + } + if len(inserts) > 0 { + _, err = tx.NewInsert().Model(&inserts).Exec(ctx) + if err != nil { + tx.Rollback() return err } }