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

refactor(s8): remove exception type domain field

YY968XX 1 месяц назад
Родитель
Сommit
db2b816f5c

+ 1 - 2
Web/src/views/aidop/s8/api/s8ConfigApi.ts

@@ -28,7 +28,6 @@ export interface S8ExceptionTypeConfigRow {
 	factoryId: number;
 	typeCode: string;
 	typeName: string;
-	domainCode: string;
 	sceneCode: string;
 	severityDefault: string;
 	slaMinutes: number;
@@ -140,7 +139,7 @@ export const s8ConfigApi = {
 			service.get<S8ConfigSysUserRow[]>('/api/aidop/s8/config/sys-users', { params }).then(unwrap),
 	},
 	exceptionTypes: {
-		list: (params?: { tenantId?: number; factoryId?: number; domainCode?: string; enabledOnly?: boolean }) =>
+		list: (params?: { tenantId?: number; factoryId?: number; enabledOnly?: boolean }) =>
 			service.get<S8ExceptionTypeConfigRow[]>('/api/aidop/s8/config/exception-types', { params }).then(unwrap),
 		detail: (typeCode: string, params?: { tenantId?: number; factoryId?: number }) =>
 			service.get<S8ExceptionTypeConfigRow>(`/api/aidop/s8/config/exception-types/${typeCode}`, { params }).then(unwrap),

+ 0 - 13
Web/src/views/aidop/s8/config/S8ExceptionTypeConfigPage.vue

@@ -7,7 +7,6 @@ import { s8ConfigApi } from '../api/s8ConfigApi';
 const columns = [
 	{ key: 'typeCode', label: '类型编码', width: 180 },
 	{ key: 'typeName', label: '类型名称', width: 180 },
-	{ key: 'domainCode', label: '所属域', width: 120 },
 	{ key: 'sceneCode', label: '场景编码', width: 150 },
 	{ key: 'enabled', label: '启用', width: 90 },
 	{ key: 'sortNo', label: '排序', width: 90 },
@@ -20,17 +19,6 @@ const columns = [
 const fields = [
 	{ key: 'typeCode', label: '类型编码', type: 'input', required: true, placeholder: '如 ORDER_CHANGE' },
 	{ key: 'typeName', label: '类型名称', type: 'input', required: true },
-	{
-		key: 'domainCode',
-		label: '所属域',
-		type: 'select',
-		required: true,
-		options: [
-			{ label: '交付', value: 'DELIVERY' },
-			{ label: '生产', value: 'PRODUCTION' },
-			{ label: '供应', value: 'SUPPLY' },
-		],
-	},
 	{ key: 'sceneCode', label: '场景编码', type: 'select', required: true, optionsKey: 'scenes' },
 	{ key: 'severityDefault', label: '默认严重度', type: 'select', optionsKey: 'severities', hidden: true },
 	{ key: 'slaMinutes', label: 'SLA(分钟)', type: 'number', hidden: true },
@@ -58,7 +46,6 @@ const fields = [
 const buildDefault = () => ({
 	typeCode: '',
 	typeName: '',
-	domainCode: 'DELIVERY',
 	sceneCode: '',
 	severityDefault: 'MEDIUM',
 	slaMinutes: 60,

+ 1 - 2
server/Plugins/Admin.NET.Plugin.AiDOP/Controllers/S8/AdoS8ConfigExceptionTypesController.cs

@@ -16,9 +16,8 @@ public class AdoS8ConfigExceptionTypesController : ControllerBase
     public async Task<IActionResult> ListAsync(
         [FromQuery] long tenantId = 1,
         [FromQuery] long factoryId = 1,
-        [FromQuery] string? domainCode = null,
         [FromQuery] bool? enabledOnly = null)
-        => Ok(await _svc.ListAsync(tenantId, factoryId, domainCode, enabledOnly));
+        => Ok(await _svc.ListAsync(tenantId, factoryId, enabledOnly));
 
     [HttpGet("{typeCode}")]
     public async Task<IActionResult> GetAsync(string typeCode, [FromQuery] long tenantId = 1, [FromQuery] long factoryId = 1)

+ 0 - 5
server/Plugins/Admin.NET.Plugin.AiDOP/Entity/S8/AdoS8ExceptionType.cs

@@ -6,7 +6,6 @@ namespace Admin.NET.Plugin.AiDOP.Entity.S8;
 /// </summary>
 [SugarTable("ado_s8_exception_type", "S8 异常类型配置")]
 [SugarIndex("uk_ado_s8_exception_type_tenant_factory_code", nameof(TenantId), OrderByType.Asc, nameof(FactoryId), OrderByType.Asc, nameof(TypeCode), OrderByType.Asc, IsUnique = true)]
-[SugarIndex("idx_ado_s8_exception_type_domain_enabled", nameof(DomainCode), OrderByType.Asc, nameof(Enabled), OrderByType.Asc)]
 public class AdoS8ExceptionType
 {
     [SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true, ColumnDataType = "bigint")]
@@ -25,10 +24,6 @@ public class AdoS8ExceptionType
     [SugarColumn(ColumnName = "type_name", Length = 128)]
     public string TypeName { get; set; } = string.Empty;
 
-    /// <summary>所属域:DELIVERY(S1+S7) / PRODUCTION(S2+S6) / SUPPLY(S3-S5)</summary>
-    [SugarColumn(ColumnName = "domain_code", Length = 32)]
-    public string DomainCode { get; set; } = string.Empty;
-
     /// <summary>关联场景(复用 AdoS8SceneConfig.SceneCode)</summary>
     [SugarColumn(ColumnName = "scene_code", Length = 64)]
     public string SceneCode { get; set; } = string.Empty;

+ 27 - 28
server/Plugins/Admin.NET.Plugin.AiDOP/SeedData/S8ExceptionTypeSeedData.cs

@@ -8,9 +8,10 @@ namespace Admin.NET.Plugin.AiDOP;
 /// 依赖 S8RolePermissionSeedData(owner_role_code 引用 ROLE_* 编码)。
 ///
 /// 历史轨迹:
-///   - 初版:13 条,scene_code 用旧复合(S1S7_DELIVERY / S2S6_PRODUCTION / S3S5_SUPPLY)。
+///   - 初版:13 条,scene_code 用旧复合(S1S7_DELIVERY / S2S6_PRODUCTION / S3S5_SUPPLY),含 domain_code
 ///   - S8-SCENE-MIGRATE-CONFIG-S1S7-1(DB 阶段):DB 中现有 15 条迁 S1–S7 + 新增 5 条 = 20。
-///   - 本轮 S8-SCENE-MIGRATE-RUNTIME-CODE-S1S7-1:SeedData 重写为 S1–S7 baseline。
+///   - S8-SCENE-MIGRATE-RUNTIME-CODE-S1S7-1:SeedData 重写为 S1–S7 baseline。
+///   - S8-EXCEPTION-TYPE-DOMAIN-REMOVE-1(本轮):彻底移除 domain_code 字段。
 ///
 /// 字段约定:Id 与 DB 现有 1:1 对齐;type_code 全保留;sort_no 与 DB 一致;enabled=true。
 /// </summary>
@@ -24,37 +25,36 @@ public class S8ExceptionTypeSeedData : ISqlSugarEntitySeedData<Entity.S8.AdoS8Ex
 
         return new[]
         {
-            // ── DELIVERY 域:S1 产销协同 + S7 成品仓储 ──
-            T(baseId + 1,  "ORDER_CHANGE",             "订单变更",           "DELIVERY",   S8SceneCode.S1, 60,  "ROLE_ORDER_PLANNER",      "MEDIUM", 100, ct),
-            T(baseId + 2,  "DELIVERY_DELAY",           "交期延迟",           "DELIVERY",   S8SceneCode.S7, 120, "ROLE_ORDER_PLANNER",      "HIGH",   101, ct),
-            T(baseId + 3,  "PENDING_SHIPMENT",         "入库待发",           "DELIVERY",   S8SceneCode.S7, 240, "ROLE_WH_OUTBOUND",        "MEDIUM", 102, ct),
-            T(baseId + 16, "ORDER_REVIEW_DELAY",       "订单评审延迟",       "DELIVERY",   S8SceneCode.S1, 120, "ROLE_ORDER_PLANNER",      "MEDIUM", 400, ct),
+            // ── S1 产销协同 + S7 成品仓储(交付侧) ──
+            T(baseId + 1,  "ORDER_CHANGE",             "订单变更",           S8SceneCode.S1, 60,  "ROLE_ORDER_PLANNER",      "MEDIUM", 100, ct),
+            T(baseId + 2,  "DELIVERY_DELAY",           "交期延迟",           S8SceneCode.S7, 120, "ROLE_ORDER_PLANNER",      "HIGH",   101, ct),
+            T(baseId + 3,  "PENDING_SHIPMENT",         "入库待发",           S8SceneCode.S7, 240, "ROLE_WH_OUTBOUND",        "MEDIUM", 102, ct),
+            T(baseId + 16, "ORDER_REVIEW_DELAY",       "订单评审延迟",       S8SceneCode.S1, 120, "ROLE_ORDER_PLANNER",      "MEDIUM", 400, ct),
 
-            // ── PRODUCTION 域:S2 制造协同 + S6 生产执行 ──
-            // 注:MATERIAL_SHORTAGE 跨 domain 迁到 S5(CONFIG 阶段决策),domain_code 仍 PRODUCTION 与 DB 一致。
-            T(baseId + 4,  "EQUIP_FAULT",              "设备异常",           "PRODUCTION", S8SceneCode.S2, 30,  "ROLE_EQUIP_MAINT",        "HIGH",   200, ct),
-            T(baseId + 14, "DIMENSION_DEVIATION",      "尺寸超差",           "PRODUCTION", S8SceneCode.S2, 60,  "ROLE_QC",                 "HIGH",   200, ct),
-            T(baseId + 5,  "MATERIAL_SHORTAGE",        "物料异常",           "PRODUCTION", S8SceneCode.S5, 60,  "ROLE_PRODUCTION_PLANNER", "HIGH",   201, ct),
-            T(baseId + 6,  "QUALITY_DEFECT",           "质量异常",           "PRODUCTION", S8SceneCode.S2, 60,  "ROLE_QC",                 "HIGH",   202, ct),
-            T(baseId + 15, "YIELD_DEFICIT",            "良率不足",           "PRODUCTION", S8SceneCode.S6, 60,  "ROLE_QC",                 "HIGH",   300, ct),
-            T(baseId + 19, "WORK_ORDER_DELAY",         "工单延期",           "PRODUCTION", S8SceneCode.S6, 60,  "ROLE_PRODUCTION_PLANNER", "HIGH",   403, ct),
+            // ── S2 制造协同 + S6 生产执行 ──
+            T(baseId + 4,  "EQUIP_FAULT",              "设备异常",           S8SceneCode.S2, 30,  "ROLE_EQUIP_MAINT",        "HIGH",   200, ct),
+            T(baseId + 14, "DIMENSION_DEVIATION",      "尺寸超差",           S8SceneCode.S2, 60,  "ROLE_QC",                 "HIGH",   200, ct),
+            T(baseId + 5,  "MATERIAL_SHORTAGE",        "物料异常",           S8SceneCode.S5, 60,  "ROLE_PRODUCTION_PLANNER", "HIGH",   201, ct),
+            T(baseId + 6,  "QUALITY_DEFECT",           "质量异常",           S8SceneCode.S2, 60,  "ROLE_QC",                 "HIGH",   202, ct),
+            T(baseId + 15, "YIELD_DEFICIT",            "良率不足",           S8SceneCode.S6, 60,  "ROLE_QC",                 "HIGH",   300, ct),
+            T(baseId + 19, "WORK_ORDER_DELAY",         "工单延期",           S8SceneCode.S6, 60,  "ROLE_PRODUCTION_PLANNER", "HIGH",   403, ct),
 
-            // ── SUPPLY 域:S3 供应协同 + S4 采购执行 + S5 物料仓储 ──
-            T(baseId + 7,  "SUPPLIER_ETA_ISSUE",       "供应商回复交期异常", "SUPPLY",     S8SceneCode.S3, 240, "ROLE_PURCHASER",          "MEDIUM", 300, ct),
-            T(baseId + 8,  "SUPPLIER_SHIP_ISSUE",      "供应商发货异常",     "SUPPLY",     S8SceneCode.S3, 240, "ROLE_PURCHASER",          "MEDIUM", 301, ct),
-            T(baseId + 9,  "WH_INBOUND_ISSUE",         "仓库收货异常",       "SUPPLY",     S8SceneCode.S5, 120, "ROLE_WH_INBOUND",         "MEDIUM", 302, ct),
-            T(baseId + 10, "IQC_ISSUE",                "IQC 检验异常",       "SUPPLY",     S8SceneCode.S3, 120, "ROLE_QC",                 "MEDIUM", 303, ct),
-            T(baseId + 11, "WH_PUTAWAY_ISSUE",         "仓库上架入库异常",   "SUPPLY",     S8SceneCode.S5, 120, "ROLE_WH_INBOUND",         "LOW",    304, ct),
-            T(baseId + 12, "WH_KIT_ISSUE",             "仓库工单备料异常",   "SUPPLY",     S8SceneCode.S5, 60,  "ROLE_WH_OUTBOUND",        "MEDIUM", 305, ct),
-            T(baseId + 13, "WH_ISSUE_OUT_ISSUE",       "仓库工单发料异常",   "SUPPLY",     S8SceneCode.S7, 60,  "ROLE_WH_OUTBOUND",        "MEDIUM", 306, ct),
-            T(baseId + 17, "PURCHASE_EXECUTION_DELAY", "采购执行延迟",       "SUPPLY",     S8SceneCode.S4, 120, "ROLE_PURCHASER",          "MEDIUM", 401, ct),
-            T(baseId + 18, "PURCHASE_QUALITY_ABNORMAL","采购质量异常",       "SUPPLY",     S8SceneCode.S4, 60,  "ROLE_QC",                 "MEDIUM", 402, ct),
-            T(baseId + 20, "MATERIAL_STOCK_ABNORMAL",  "库存异常",           "SUPPLY",     S8SceneCode.S5, 120, "ROLE_WH_INBOUND",         "MEDIUM", 404, ct),
+            // ── S3 供应协同 + S4 采购执行 + S5 物料仓储 ──
+            T(baseId + 7,  "SUPPLIER_ETA_ISSUE",       "供应商回复交期异常", S8SceneCode.S3, 240, "ROLE_PURCHASER",          "MEDIUM", 300, ct),
+            T(baseId + 8,  "SUPPLIER_SHIP_ISSUE",      "供应商发货异常",     S8SceneCode.S3, 240, "ROLE_PURCHASER",          "MEDIUM", 301, ct),
+            T(baseId + 9,  "WH_INBOUND_ISSUE",         "仓库收货异常",       S8SceneCode.S5, 120, "ROLE_WH_INBOUND",         "MEDIUM", 302, ct),
+            T(baseId + 10, "IQC_ISSUE",                "IQC 检验异常",       S8SceneCode.S3, 120, "ROLE_QC",                 "MEDIUM", 303, ct),
+            T(baseId + 11, "WH_PUTAWAY_ISSUE",         "仓库上架入库异常",   S8SceneCode.S5, 120, "ROLE_WH_INBOUND",         "LOW",    304, ct),
+            T(baseId + 12, "WH_KIT_ISSUE",             "仓库工单备料异常",   S8SceneCode.S5, 60,  "ROLE_WH_OUTBOUND",        "MEDIUM", 305, ct),
+            T(baseId + 13, "WH_ISSUE_OUT_ISSUE",       "仓库工单发料异常",   S8SceneCode.S7, 60,  "ROLE_WH_OUTBOUND",        "MEDIUM", 306, ct),
+            T(baseId + 17, "PURCHASE_EXECUTION_DELAY", "采购执行延迟",       S8SceneCode.S4, 120, "ROLE_PURCHASER",          "MEDIUM", 401, ct),
+            T(baseId + 18, "PURCHASE_QUALITY_ABNORMAL","采购质量异常",       S8SceneCode.S4, 60,  "ROLE_QC",                 "MEDIUM", 402, ct),
+            T(baseId + 20, "MATERIAL_STOCK_ABNORMAL",  "库存异常",           S8SceneCode.S5, 120, "ROLE_WH_INBOUND",         "MEDIUM", 404, ct),
         };
     }
 
     private static Entity.S8.AdoS8ExceptionType T(
-        long id, string typeCode, string typeName, string domainCode, string sceneCode,
+        long id, string typeCode, string typeName, string sceneCode,
         int slaMinutes, string ownerRoleCode, string severityDefault, int sortNo, DateTime ct) =>
         new()
         {
@@ -63,7 +63,6 @@ public class S8ExceptionTypeSeedData : ISqlSugarEntitySeedData<Entity.S8.AdoS8Ex
             FactoryId = 0,
             TypeCode = typeCode,
             TypeName = typeName,
-            DomainCode = domainCode,
             SceneCode = sceneCode,
             SeverityDefault = severityDefault,
             SlaMinutes = slaMinutes,

+ 1 - 4
server/Plugins/Admin.NET.Plugin.AiDOP/Service/S8/S8ExceptionTypeService.cs

@@ -15,12 +15,11 @@ public class S8ExceptionTypeService : ITransient
     /// <summary>
     /// 列表查询:合并全局基线 + 工厂覆盖,同 type_code 以工厂记录优先。
     /// </summary>
-    public async Task<List<AdoS8ExceptionType>> ListAsync(long tenantId, long factoryId, string? domainCode = null, bool? enabledOnly = null)
+    public async Task<List<AdoS8ExceptionType>> ListAsync(long tenantId, long factoryId, bool? enabledOnly = null)
     {
         var all = await _rep.AsQueryable()
             .Where(x => (x.TenantId == 0 && x.FactoryId == 0)
                      || (x.TenantId == tenantId && x.FactoryId == factoryId))
-            .WhereIF(!string.IsNullOrWhiteSpace(domainCode), x => x.DomainCode == domainCode)
             .WhereIF(enabledOnly == true, x => x.Enabled)
             .ToListAsync();
 
@@ -46,8 +45,6 @@ public class S8ExceptionTypeService : ITransient
     {
         if (string.IsNullOrWhiteSpace(body.TypeCode) || string.IsNullOrWhiteSpace(body.TypeName))
             throw new S8BizException("类型编码和名称必填");
-        if (string.IsNullOrWhiteSpace(body.DomainCode))
-            throw new S8BizException("所属域必填");
         var exists = await _rep.AsQueryable()
             .AnyAsync(x => x.TenantId == body.TenantId && x.FactoryId == body.FactoryId && x.TypeCode == body.TypeCode);
         if (exists) throw new S8BizException("同一工厂下类型编码已存在");

+ 1 - 1
server/Plugins/Admin.NET.Plugin.AiDOP/Service/S8/S8MonitoringService.cs

@@ -66,7 +66,7 @@ public class S8MonitoringService : ITransient
             };
         }).ToList();
 
-        // ── ByCategory:按异常类型的 domain_code/type_code 聚合为 5 大业务类别 ──
+        // ── ByCategory:按异常类型的 type_code 聚合为 5 大业务类别(CategoryOf) ──
         var typeMap = (await _typeRep.AsQueryable()
                 .Where(t => (t.TenantId == 0 && t.FactoryId == 0)
                          || (t.TenantId == tenantId && t.FactoryId == factoryId))