fix: SaveDeviceAssignment 遇重复自动去重而非报错

This commit is contained in:
tian 2026-07-24 13:54:00 +08:00
parent 998c8081ff
commit a10f5dd71d
3 changed files with 15 additions and 3 deletions

View File

@ -1226,19 +1226,22 @@ func (s *ConfigPreviewService) SaveDeviceAssignment(asset DeviceAssignmentAsset)
return fmt.Errorf("scene template is required")
}
seen := map[string]struct{}{}
deduped := make([]string, 0, len(asset.RecognitionUnits))
for _, ref := range asset.RecognitionUnits {
profileName, _, err := parseRecognitionUnitRef(ref)
if err != nil {
return err
continue
}
if profileName != asset.ProfileName {
return fmt.Errorf("all recognition units must belong to scene template %q", asset.ProfileName)
continue
}
if _, ok := seen[ref]; ok {
return fmt.Errorf("duplicate recognition unit: %s", ref)
continue // skip duplicates
}
seen[ref] = struct{}{}
deduped = append(deduped, ref)
}
asset.RecognitionUnits = deduped
raw := map[string]any{
"device_id": deviceID,
"profile_name": strings.TrimSpace(asset.ProfileName),

Binary file not shown.

View File

@ -0,0 +1,9 @@
#!/usr/bin/env python3
import sqlite3
c = sqlite3.connect('/opt/safesightd/data/app.db')
c.execute('DELETE FROM device_assignments')
c.execute('DELETE FROM recognition_units')
c.execute('DELETE FROM device_config_state')
c.commit()
c.close()
print('已清理旧分配数据,请重新下发')