77bc010ba9
Replace the Batch-1-stubbed authored-tag flow with a UnsTagReference list on the equipment page's Tags tab (v3 reference-only equipment): columns are effective name, computed raw path, inherited datatype/access (read-only), display-name override (editable), and remove. The retired equipment-authored-tag editor (TagModal.razor) is deleted; the VirtualTag and ScriptedAlarm flows are untouched. - "+ Add reference" opens a new AddReferenceModal that reuses RawTree in a new opt-in PickerMode (Tag-leaf checkboxes + Device/TagGroup "select all tags below"), scoped structurally to the equipment's cluster via LoadReferencePickerRootAsync (a single cluster root — cross-cluster tags are unreachable, not merely hidden). Default /raw usage is byte-unchanged (PickerMode defaults false). - UnsTreeService (+ IUnsTreeService) gain the reference mutations: LoadReferencesForEquipmentAsync (computes each RawPath via the shared RawPathResolver), AddReferencesAsync (cluster-checked, all-or-nothing), RemoveReferenceAsync, SetReferenceOverrideAsync, plus the picker helpers LoadReferencePickerRootAsync / LoadDescendantTagIdsAsync. - Consume IEffectiveNameGuard (constructor-injected, no-op fallback when unregistered): AddReferences, SetReferenceOverride, and the VirtualTag + ScriptedAlarm create/update mutations now call CheckAsync before persisting and surface a collision as the failure. WP2 supplies the implementation + DI registration. - Drop the retired equipment↔driver binding: remove DriverInstanceId from EquipmentInput, the ImportEquipmentModal CSV column, the EquipmentPage Details driver select, and the dead decision-#122 driver-cluster guard. Tests: new UnsTreeServiceReferenceTests (add/remove/override, cross-cluster + duplicate rejection, guard-consumed rejection via a fake guard, RawPath projection, picker helpers); Equipment/Import test suites rewritten to drop the retired driver-guard cases. AdminUI suite green (639 passed, 3 skipped); full solution builds 0 errors. Claude-Session: https://claude.ai/code/session_01LVneM3eh1UtJxEisFXgmox
42 lines
2.1 KiB
C#
42 lines
2.1 KiB
C#
namespace ZB.MOM.WW.OtOpcUa.AdminUI.Uns;
|
|
|
|
/// <summary>
|
|
/// Parameter object carrying the operator-editable fields for an equipment create or update,
|
|
/// so <see cref="IUnsTreeService.CreateEquipmentAsync"/> and
|
|
/// <see cref="IUnsTreeService.UpdateEquipmentAsync"/> avoid an unwieldy positional signature.
|
|
/// The <c>EquipmentId</c> and <c>EquipmentUuid</c> are system-generated and are
|
|
/// therefore not part of this input. Optional string fields that arrive whitespace-only are
|
|
/// collapsed to <c>null</c> by the service.
|
|
/// </summary>
|
|
/// <param name="Name">UNS level-5 segment; matches <c>^[a-z0-9-]{1,32}$</c>.</param>
|
|
/// <param name="MachineCode">Operator colloquial id; unique fleet-wide.</param>
|
|
/// <param name="UnsLineId">Logical FK to the owning <see cref="Configuration.Entities.UnsLine"/>.</param>
|
|
/// <param name="ZTag">Optional ERP equipment id.</param>
|
|
/// <param name="SAPID">Optional SAP PM equipment id.</param>
|
|
/// <param name="Manufacturer">Optional OPC 40010 manufacturer name.</param>
|
|
/// <param name="Model">Optional OPC 40010 model designation.</param>
|
|
/// <param name="SerialNumber">Optional OPC 40010 serial number.</param>
|
|
/// <param name="HardwareRevision">Optional OPC 40010 hardware revision.</param>
|
|
/// <param name="SoftwareRevision">Optional OPC 40010 software revision.</param>
|
|
/// <param name="YearOfConstruction">Optional OPC 40010 year of construction.</param>
|
|
/// <param name="AssetLocation">Optional OPC 40010 asset location.</param>
|
|
/// <param name="ManufacturerUri">Optional OPC 40010 manufacturer URI.</param>
|
|
/// <param name="DeviceManualUri">Optional OPC 40010 device-manual URI.</param>
|
|
/// <param name="Enabled">Whether the equipment is surfaced in deployments.</param>
|
|
public sealed record EquipmentInput(
|
|
string Name,
|
|
string MachineCode,
|
|
string UnsLineId,
|
|
string? ZTag,
|
|
string? SAPID,
|
|
string? Manufacturer,
|
|
string? Model,
|
|
string? SerialNumber,
|
|
string? HardwareRevision,
|
|
string? SoftwareRevision,
|
|
short? YearOfConstruction,
|
|
string? AssetLocation,
|
|
string? ManufacturerUri,
|
|
string? DeviceManualUri,
|
|
bool Enabled);
|