2026-04-09-s0-mfg-sop-prevprocess-implementation-plan.md 8.6 KB

S0 制造:前处理要素参数 + SOP(按源平台语义) Implementation Plan

For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.

Goal: 将“前处理要素参数 / SOP维护 / SOP文件类型”三页按源平台语义(DevMonitor/QualitySegmentImage/ImageType)收敛,并删除现有不一致的 sop-document/sop-file-type 新表语义实现。

Architecture: 后端保留菜单与前端路由不变;API 路由保持 /api/s0/manufacturing/sop-documents、/api/s0/manufacturing/sop-file-types、(新增/改造)前处理要素参数接口,但内部数据模型切换到方案建议的表/字段语义。SOP 列表使用 SqlSugar Queryable 做左联,仅展示联表字段。

Tech Stack: .NET / Admin.NET Plugin, SqlSugar, C# DTO/Controller/Entity, SugarTable/SugarColumn


Task 1: 盘点现有实现与入口(避免遗漏删除)

Files:

  • Review: AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/SeedData/SysMenuSeedData.cs
  • Review: AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/Controllers/S0/Manufacturing/AdoS0MfgSopDocumentsController.cs
  • Review: AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/Controllers/S0/Manufacturing/AdoS0MfgSopFileTypesController.cs
  • Review: AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/Controllers/S0/Manufacturing/AdoS0MfgElementParamsController.cs
  • Review: AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/Dto/S0/Manufacturing/AdoS0ManufacturingDtos.cs
  • Review: AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/Entity/S0/Manufacturing/AdoS0DevMonitor.cs
  • Review: AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/Entity/S0/Manufacturing/AdoS0MfgMastersAndSop.cs

Step 1: Search all references

Run:

  • rg -n "sop-documents|sop-file-types|AdoS0MfgSopDocument|AdoS0MfgSopFileType|SopMaintenanceList|SopFileTypeList" AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP -S

Expected:

  • 能列出 Controller/DTO/Entity/Startup/Menu 入口,便于后续删除或重写。

Step 2: No code changes yet


Task 2: 前处理要素参数(DevMonitor 子集)接口改造:固定 CodeType='PrevProcess'

Files:

  • Modify: AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/Controllers/S0/Manufacturing/AdoS0MfgElementParamsController.cs
  • Modify: AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/Dto/S0/Manufacturing/AdoS0ManufacturingDtos.cs(若需要分离 PrevProcess Query/Upsert DTO)
  • (Optional) Add: AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/Controllers/S0/Manufacturing/AdoS0MfgPreprocessElementParamsController.cs

Step 1: Decide endpoint shape

  • Option A (recommended): 新增专用 Controller(例如 preprocess-element-params)避免与生产要素参数(Prod)混用。
  • Option B: 保持 element-params 路由但加 codeType 参数;本项目当前 element-params 已强制 "Prod",与本次方案冲突。

Step 2: Implement minimal changes (Option A)

  • 新增 Controller:GET/POST/PUT/DELETE 基于 AdoS0DevMonitor,所有读写强制 CodeType = "PrevProcess".
  • 列表 GET:Domain 必填;keyword 匹配 DeviceNumber/DeviceDescr/MessageCode/CodeDescr.

Step 3: Quick verify Run:

  • dotnet build AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/Admin.NET.Plugin.AiDOP.csproj -c Release Expected: build success.

Task 3: 新增 SOP 文件类型实体 ImageType(按方案表/字段)

Files:

  • Create: AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/Entity/S0/Manufacturing/AdoS0ImageType.cs
  • Modify (if needed): AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/Dto/S0/Manufacturing/AdoS0ManufacturingDtos.cs(SOP 文件类型 Query/Upsert DTO 改为 Domain + ImageTypeID/Descr)

Step 1: Add entity

  • [SugarTable("ado_s0_mfg_image_type", "S0 SOP 文件类型(源平台 ImageType)")]
  • 字段:Id (bigint pk)、ImageTypeID (string)、Descr (string?)、Domain (string)。

Step 2: Add/adjust DTOs

  • Query:Domain 必填 + 分页 + keyword(匹配 ImageTypeID/Descr)。
  • Upsert:Domain、ImageTypeID、Descr。

Step 3: Build Run dotnet build ... 期望成功。


Task 4: 新增 SOP 维护实体 QualitySegmentImage(按方案表/字段)

Files:

  • Create: AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/Entity/S0/Manufacturing/AdoS0QualitySegmentImage.cs
  • Modify: AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/Dto/S0/Manufacturing/AdoS0ManufacturingDtos.cs(SOP 维护 Query/Upsert DTO 改为 Domain + 方案字段)

Step 1: Add entity

  • [SugarTable("ado_s0_mfg_quality_segment_image", "S0 SOP 维护(源平台 QualitySegmentImage)")]
  • 字段:Id、Line、ItemNum、Op、ImageTypeID、Path、Descr、Rev、SortID、Domain。

Step 2: Add DTOs

  • Query:Domain 必填 + keyword(匹配 ItemNum/Op/Descr/Path 等)
  • Upsert:按方案字段(至少包含 ImageTypeID/Path/Descr/Rev/SortID/Line/ItemNum/Op/Domain)

Step 3: Build Run dotnet build ...


Task 5: 重写 sop-file-types Controller:从 AdoS0MfgSopFileType 切到 AdoS0ImageType

Files:

  • Modify: AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/Controllers/S0/Manufacturing/AdoS0MfgSopFileTypesController.cs
  • Delete (later): AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/Entity/S0/Manufacturing/AdoS0MfgMastersAndSop.cs 中 AdoS0MfgSopFileType(或迁移后再删)

Step 1: Replace repository type

  • _rep 从 SqlSugarRepository<AdoS0MfgSopFileType> 改为 SqlSugarRepository<AdoS0ImageType>

Step 2: Implement list

  • 按 Domain 过滤(必填)
  • keyword 匹配 ImageTypeID/Descr

Step 3: Implement CRUD

  • Create/Update 按 DTO 写 Domain/ImageTypeID/Descr

Step 4: Build Run dotnet build ...


Task 6: 重写 sop-documents Controller:从 AdoS0MfgSopDocument 切到 AdoS0QualitySegmentImage + 左联展示

Files:

  • Modify: AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/Controllers/S0/Manufacturing/AdoS0MfgSopDocumentsController.cs
  • Ensure existing entities exist for joins (if missing, create minimal):
    • LineMaster(或项目中已有对应实体)
    • RoutingOpDetail(或项目中已有对应实体)

Step 1: Replace repository type

  • _rep 改为 SqlSugarRepository<AdoS0QualitySegmentImage>

Step 2: Implement list with left joins

  • 基表 QualitySegmentImage q
  • 左联 ImageType i(按 q.ImageTypeID == i.ImageTypeID && q.Domain == i.Domain)
  • 左联 LineMaster l(按 q.Line == l.Line && q.Domain == l.Domain)
  • 左联 RoutingOpDetail r(按 q.Op == r.Op && q.Domain == r.Domain && r.RoutingCode == q.ItemNum)
  • 返回 shaped DTO/匿名对象:
    • id
    • Line(拼接展示字段)
    • ItemNum
    • Op(拼接展示字段)
    • imgType(i.Descr)
    • Path/Descr/Rev/SortID

Step 3: Implement Get(id)/Create/Update/Delete

  • Create/Update 只写主表字段(联表字段不写)

Step 4: Build Run dotnet build ...


Task 7: 删除旧 SOP 新表语义(按你选择 A:废弃并删除)

Files:

  • Modify/Delete: AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/Entity/S0/Manufacturing/AdoS0MfgMastersAndSop.cs(移除 AdoS0MfgSopFileType、AdoS0MfgSopDocument 类)
  • Modify: AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/Dto/S0/Manufacturing/AdoS0ManufacturingDtos.cs(移除/替换旧 DTO:CompanyRefId/FactoryRefId/Code/Name 等)
  • Search & fix references across plugin

Step 1: Delete old entities

  • 确保 Controller 已迁移且无引用后再删。

Step 2: Search & fix Run:

  • rg -n "AdoS0MfgSopDocument|AdoS0MfgSopFileType|SopFileTypeId|DocStatus|FileId|CreatedAt|UpdatedAt" AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP -S Expected: 不再出现旧语义实体/字段引用(除非其他模块确实还需要——如出现则回到设计拆分)。

Step 3: Build Run dotnet build ... Expected: success.


Task 8: 验证菜单入口仍可用(仅验证配置,不要求跑前端)

Files:

  • Review: AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/SeedData/SysMenuSeedData.cs

Step 1: Confirm paths unchanged

  • SOP 文件类型: /aidop/s0/manufacturing/sop-file-type
  • SOP 维护: /aidop/s0/manufacturing/sop-document
  • 前处理要素参数: /aidop/s0/manufacturing/preprocess-element-param(页面侧)对应的后端接口需能按方案提供数据

Task 9: 最终全量编译验证

Run:

  • dotnet build AiDOPWarehouse/server/Plugins/Admin.NET.Plugin.AiDOP/Admin.NET.Plugin.AiDOP.csproj -c Release
  • (如仓库有 solution)dotnet build AiDOPWarehouse/server -c Release

Expected: build success.