chore: snapshot production code before Apple Design UI refinement

This commit is contained in:
lingniu
2026-09-17 18:05:57 +08:00
parent 9f0a87f49e
commit f7e7176f88
90 changed files with 8990 additions and 328 deletions
@@ -0,0 +1,97 @@
//go:build ignore
package main
import (
"database/sql"
"encoding/json"
"os"
"sort"
"strings"
"time"
_ "github.com/go-sql-driver/mysql"
)
type metadataRecord struct {
VIN string `json:"vin"`
Plate string `json:"plate"`
Brand string `json:"brand"`
Model string `json:"model"`
VehicleModelID int64 `json:"vehicle_model_id"`
BatteryCapacityKWh float64 `json:"battery_capacity_kwh"`
TankCapacityL float64 `json:"tank_capacity_l"`
SourceUpdatedAt *time.Time `json:"source_updated_at,omitempty"`
}
func main() {
if len(os.Args) != 2 {
panic("usage: query_metadata <output.json>")
}
dsn := strings.TrimSpace(os.Getenv("MYSQL_DSN"))
if dsn == "" {
panic("MYSQL_DSN is required")
}
db, err := sql.Open("mysql", dsn)
if err != nil {
panic(err)
}
defer db.Close()
rows, err := db.Query(`SELECT UPPER(TRIM(vi.vin)),COALESCE(vi.plate_number,''),
COALESCE(vm.brand,''),COALESCE(vm.model,''),vm.id,vm.battery_capacity,vm.tank_capacity,
CASE
WHEN vi.update_time IS NULL THEN vm.update_time
WHEN vm.update_time IS NULL THEN vi.update_time
ELSE GREATEST(vi.update_time,vm.update_time)
END
FROM ln_asset_management.vehicle_info vi
JOIN ln_asset_management.vehicle_model vm ON vm.id=vi.vehicle_model_id
WHERE COALESCE(vi.del_flag,'0')='0' AND COALESCE(vm.del_flag,'0')='0'
AND LOWER(TRIM(vm.brand))='hyundai'
AND LENGTH(TRIM(vi.vin))=17
AND vm.tank_capacity>0
AND vm.battery_capacity>0
ORDER BY vi.vin,vi.update_time DESC,vi.id DESC`)
if err != nil {
panic(err)
}
defer rows.Close()
byVIN := map[string]metadataRecord{}
for rows.Next() {
var row metadataRecord
var updated sql.NullTime
if err := rows.Scan(&row.VIN, &row.Plate, &row.Brand, &row.Model, &row.VehicleModelID, &row.BatteryCapacityKWh, &row.TankCapacityL, &updated); err != nil {
panic(err)
}
if _, exists := byVIN[row.VIN]; exists {
continue
}
if updated.Valid {
value := updated.Time
row.SourceUpdatedAt = &value
}
byVIN[row.VIN] = row
}
if err := rows.Err(); err != nil {
panic(err)
}
vins := make([]string, 0, len(byVIN))
for vin := range byVIN {
vins = append(vins, vin)
}
sort.Strings(vins)
out := make([]metadataRecord, 0, len(vins))
for _, vin := range vins {
out = append(out, byVIN[vin])
}
output, err := os.Create(os.Args[1])
if err != nil {
panic(err)
}
defer output.Close()
encoder := json.NewEncoder(output)
encoder.SetIndent("", " ")
if err := encoder.Encode(out); err != nil {
panic(err)
}
}