Просмотр исходного кода

fix(s0): guard duplicate quality base type code

YY968XX 2 недель назад
Родитель
Сommit
9e13a439b3

+ 6 - 0
server/Plugins/Admin.NET.Plugin.AiDOP/Const/AdoS0ErrorCodes.cs

@@ -60,4 +60,10 @@ public static class AdoS0ErrorCodes
     public const string NbrControlCodeExists = "S04009";
     public const string ItemPackCodeExists = "S04010";
     public const string TaskAssignmentCodeExists = "S04011";
+
+    /// <summary>
+    /// C4 质量字典 (TypeCategory, TypeCode) 唯一约束冲突。
+    /// 返回 409 Conflict。
+    /// </summary>
+    public const string QualityBaseTypeDuplicate = "S04012";
 }

+ 19 - 0
server/Plugins/Admin.NET.Plugin.AiDOP/Controllers/S0/Quality/AdoS0QualityBaseDataControllers.cs

@@ -41,6 +41,15 @@ public class AdoS0QmsQualityBaseTypesController : ControllerBase
     [HttpPost]
     public async Task<IActionResult> CreateAsync([FromBody] AdoS0QmsQualityBaseTypeUpsertDto dto)
     {
+        // C4 唯一性 pre-check:(TypeCategory, TypeCode) 全局唯一
+        var category = dto.TypeCategory.Trim();
+        var code = dto.TypeCode.Trim();
+        if (await _rep.AsQueryable().AnyAsync(x => x.TypeCategory == category && x.TypeCode == code))
+        {
+            return AdoS0ApiErrors.Conflict(AdoS0ErrorCodes.QualityBaseTypeDuplicate,
+                $"质量基础类型 '{category} / {code}' 已存在");
+        }
+
         var entity = new AdoS0QmsQualityBaseType();
         ApplyQualityBaseType(entity, dto, true);
         await _rep.AsInsertable(entity).ExecuteReturnEntityAsync();
@@ -52,6 +61,16 @@ public class AdoS0QmsQualityBaseTypesController : ControllerBase
     {
         var entity = await _rep.GetByIdAsync(id);
         if (entity == null) return NotFound();
+
+        // C4 唯一性 pre-check:(TypeCategory, TypeCode) 全局唯一,排除自身
+        var category = dto.TypeCategory.Trim();
+        var code = dto.TypeCode.Trim();
+        if (await _rep.AsQueryable().AnyAsync(x => x.TypeCategory == category && x.TypeCode == code && x.Id != id))
+        {
+            return AdoS0ApiErrors.Conflict(AdoS0ErrorCodes.QualityBaseTypeDuplicate,
+                $"质量基础类型 '{category} / {code}' 已存在");
+        }
+
         ApplyQualityBaseType(entity, dto, false);
         await _rep.AsUpdateable(entity).ExecuteCommandAsync();
         return Ok(entity);