# 工作进度-15:生产-后缫完善(秤大丝 / 公量纤度 / 丝片检查 / 丝片台帐) > 时间:2026-10-24(承接工作进度-14) > 需求:把 `D:\AntaiProject - 副本` 生产-后缫(`WinClient\F9.Business.Prod\HS\`)尚未落地的模块移植进本系统。 > 参考实现:`WinClient\F9.Business.Prod\HS\`(CDS / GLXD / SPJC / SPTZ)、 > `Application\CQRS\Business\PROD\HS\`(Cds_SaveCommand / Cds_Lsjl_CalZhibiaoCommand / Glxd_Update / Spjc_*/Sptz_*)、 > `Domain\Entities\Business\PROD\HS\`(Cds_Chetai / Cds_Lsjl / Glxd / Spjc / Sptz)。 > 移植后本系统「生产-后缫」子菜单由 2 项补齐到 6 项。 --- ## 一、功能设计 ``` 生产-后缫 ├── 纤度检验 (已有) ├── 黑板检验 (已有) ├── 秤大丝 /prod/houxian/cds 本次新增 ├── 公量纤度 /prod/houxian/glxd 本次新增 ├── 丝片检查 /prod/houxian/spjc 本次新增 └── 丝片台帐 /prod/houxian/sptz 本次新增 ``` | F9 行为 | 本系统实现 | |---|---| | **秤大丝**:列表按「日期 + 车间」列出落丝记录,行 → 弹窗「秤大丝」,按车台录入丝量1~4 | `GET /api/prod/cds/list`、`GET /{lsjlId}`、`POST /save`、`DELETE /{lsjlId}` | | 汇总 = Σ个数 / Σ丝量,并算茧量、缫折、台产(`Cds_Lsjl_CalZhibiaoCommand`) | 服务端保存时重算,列表直接展示 | | **公量纤度**:按「日期 + 车间」整日批量录入,左侧带出纤度检验的平均纤度 | `GET /api/prod/glxd/list`、`POST /save`(整日提交) | | **丝片检查**:按「日期 + 车间 + 工艺庄口 + 规格」记录前缫 7 项 / 后缫 12 项疵点片数 | `GET /api/prod/spjc/list`、`GET /{id}`、`POST /save`、`DELETE /{id}` | | 前缫合计 / 后缫合计自动求和(`Page_Spjc_Edit` 的 getter) | 前端即时重算 + 服务端落库前再算一次 | | **丝片台帐**:按账期月份列出每日台帐;新增时上一日 / 上存取上一本台账 | `GET /api/prod/sptz/list?dateFrom=&dateTo=`、`GET /defaults?date=`、`POST /save`、`DELETE /{id}` | | 台帐派生值:上日遗留/今日新增 = 上存 − 浸丝;今存 = 下丝 + 上日遗留/今日新增 | 前端即时算 + 服务端保存时重算(同 F9 `CalSryl_Jrxz` / `CalJc`) | | 台帐「整理片数」可按当日丝片检查汇总取数(F9 弹窗里的取数按钮) | `GET /defaults` 一并返回 `zlTichu` / `zlZhengpin` | | 新增台帐时若已存在更晚日期的台帐 → 拦截 | 同上(`LatestDate`),前端也做二次校验 | **计算口径**: ``` 秤大丝:车台.个数 = 丝量1~4 中 >0 的个数;车台.小计丝量 = Σ丝量 汇总.已秤数 = Σ个数;汇总.已秤丝量 = Σ小计丝量(g) 应秤数 = 车台数 × 4 ×(半车 0.5 / 整车 1);待秤数 = 应秤数 − 已秤数 茧量 = 落丝桶数 × 每桶茧量(g) 缫折 = 茧量 ÷ 丝量 × 100(≤100 视为异常,不落指标,与 F9 一致) 台产 = 丝量 ÷ 落丝时长 ÷ 车台数 丝片台帐:上日遗留/今日新增 = 上存 − 浸丝;今存 = 下丝 + 上日遗留/今日新增 整理剔除 = Σ当日丝片检查前缫合计 整理正品 = Σ(总片数 + 学工片数) − 剔除 ``` --- ## 二、后端 ### 2.1 实体(`Domain/Entities/Prod/`) | 类 | 文件 | 表 | 主要字段 | |---|---|---|---| | `CdsLsjl` | `Cds.cs` | `CdsLsjls` | LsjlId(唯一)、Num、Siliang、Jianliang、Saozhe、Taichan | | `CdsChetai` | `Cds.cs` | `CdsChetais` | LsjlId + Chetaihao(唯一)、Sl1~Sl4、Num、Siliang | | `Glxd` | `Glxd.cs` | `Glxds` | LsjlId(唯一)、Gongliangxiandu | | `Spjc` | `Spjc.cs` | `Spjcs` | Date + DeptId + GyzkId + Guige(唯一)、总/学工片数、Qs×7 + QsHeji、Hs×12 + HsHeji、Memo | | `Sptz` | `Sptz.cs` | `Sptzs` | Date(唯一)、DateLast、Js×5、Fs/Bs 片数、Zl 正品/剔除、Memo | | `LsjlRecord` | `LsjlRecord.cs` | `LsjlRecords` | **新增**:Tongshu(落丝桶数)、Meitongjianliang(每桶茧量 g) | > 均继承 `BaseEntity`(自增主键 + 软删除),建表沿用 `DbSeeder.SyncStructure`; > `LsjlRecords` 是存量表,`SyncStructure` 不给旧表加列,故在 `SyncStructure` 末尾追加两条 > `EnsureColumn(fsql, "LsjlRecords", "Tongshu"/"Meitongjianliang", "INTEGER NOT NULL DEFAULT 0")`。 ### 2.2 服务与接口(路由统一到 `api/prod/*`) ``` GET /api/prod/cds/list?pageIndex=&pageSize=&date=&deptId= 秤大丝列表(落丝记录 + 秤丝汇总) GET /api/prod/cds/{lsjlId} 称重弹窗(首次按车台范围初始化空行) POST /api/prod/cds/save 车台明细先删后建 + 汇总指标重算 DELETE /api/prod/cds/{lsjlId} 清除称重数据(汇总 + 明细,F9 的 Cds_Lsjl_Delete) GET /api/prod/glxd/list?date=&deptId= 公量纤度列表(含纤度检验平均纤度) POST /api/prod/glxd/save 按日期 + 车间整日批量 upsert GET /api/prod/spjc/list?pageIndex=&pageSize=&date=&deptId=&like= GET /api/prod/spjc/{id} 修改回填 POST /api/prod/spjc/save 合计服务端重算 DELETE /api/prod/spjc/{id} 物理删除(业务键带唯一索引) GET /api/prod/sptz/list?dateFrom=&dateTo=&pageIndex=&pageSize= 账期区间查询 GET /api/prod/sptz/{id} 修改回填 GET /api/prod/sptz/defaults?date= 上一本台账 + 上存 + 丝片检查取数 POST /api/prod/sptz/save 派生值服务端重算 DELETE /api/prod/sptz/{id} 物理删除(日期唯一) ``` 要点: - 唯一性校验在前:丝片检查按「日期+车间+庄口+规格」、丝片台帐按「日期」查重(修改时排除自身),命中返回 400; - 删除走 `HardDelete`(与煮茧日报同一策略),避免「删除后重建」撞唯一索引; - 秤大丝「车台明细先删后建」,保证移除的行真正删除。 ### 2.3 菜单 `DbSeeder.SeedProdMenus` 生产-后缫子菜单扩到 6 项,并做排序归一;`BusinessSeedData.SeedMenus` 同步追加同名菜单,避免两套种子不一致: | 顺序 | 菜单 | 路径 | 组件 | 权限标识 | |---|---|---|---|---| | 1 | 纤度检验 | /prod/houxian/xdjy | prod/xdjy/index | prod:xdjy:list | | 2 | 黑板检验 | /prod/houxian/hbjy | prod/hbjy/index | prod:hbjy:list | | 3 | 秤大丝 | /prod/houxian/cds | prod/cds/index | prod:cds:list | | 4 | 公量纤度 | /prod/houxian/glxd | prod/glxd/index | prod:glxd:list | | 5 | 丝片检查 | /prod/houxian/spjc | prod/spjc/index | prod:spjc:list | | 6 | 丝片台帐 | /prod/houxian/sptz | prod/sptz/index | prod:sptz:list | --- ## 三、前端 | 文件 | 说明 | |---|---| | `views/prod/cds/index.vue` | 秤大丝列表(日期 + 车间)+ 称重弹窗(车台 × 丝量1~4、个数/小计即时重算、汇总栏、偏轻/偏重着色)+ 清除称重 | | `views/prod/glxd/index.vue` | 公量纤度:按「日期 + 车间」一次加载,表格内直接编辑,整日批量保存 | | `views/prod/spjc/index.vue` | 丝片检查:多级表头(前缫 / 后缫)+ 新增/修改/删除弹窗(合计只读实时汇总)+ 工艺庄口选择页 | | `views/prod/sptz/index.vue` | 丝片台帐:账期月份查询 + 多级表头(浸丝/返丝/编丝/整理)+ 新增/修改/删除,派生值只读,「取丝片检查」按钮 | | `views/prod/lsjl/index.vue` | 落丝记录表单补「落丝桶数 / 每桶茧量」(秤大丝算茧量、缫折、台产的输入) | | `router/index.js` | `componentMap` 注册 `prod/cds/index`、`prod/glxd/index`、`prod/spjc/index`、`prod/sptz/index` | 交互要点: - 丝量 ≤900 g 标绿(偏轻)、≥1200 g 标橙(偏重),与 F9 `CellFormatting` 一致; - 丝片检查 / 丝片台帐的合计、上日遗留今日新增、今存均为只读派生值,避免与服务端口径冲突; - 丝片台帐新增时不允许早于已有最新台账日期(对齐 F9「已生成 X 台账,无法新增该日期台账」)。 --- ## 四、验证记录 | 项 | 结果 | |---|---| | `dotnet build`(Domain / Application / Infrastructure) | ✅ 0 错误 | | `dotnet build`(Api,临时输出目录 `obj\verify\`) | ✅ 0 错误 | | IDE 诊断(新增 4 个 vue + `router/index.js` + `lsjl/index.vue`) | ✅ 0 | | `vite build` | ✅ 通过(仅既有 chunk 体积警告) | | 启动种子 | ✅ `[DbSeeder] 生产模块菜单已就绪`,无结构同步异常;`EnsureColumn` 补列生效 | | 菜单与权限 | ✅ `/auth/login` 返回的 permissions 含 `prod:cds:list` / `prod:glxd:list` / `prod:spjc:list` / `prod:sptz:list` | | 四个列表接口 | ✅ 200(`cds` total=3、`glxd` / `spjc` / `sptz` 空表 200) | | 丝片检查保存 | ✅ 前缫合计 13、后缫合计 55(服务端重算) | | 丝片检查唯一性 | ✅ 同「日期+车间+庄口+规格」再存被拒(400),未产生第二条 | | 丝片台帐派生值 | ✅ 上存 120 − 浸丝 40 = 80;下丝 80 + 80 = 今存 160 | | 丝片台帐滚动 | ✅ 次日 `defaults`:`dateLast=2026-10-20`、`jsShangcun=160`(= 上一日今存) | | 丝片台帐取数 | ✅ 当日丝片检查 Σ前缫合计 = 13 → 剔除 13;Σ(总片数+学工片数) 110 − 13 = 正品 97 | | 秤大丝称重 | ✅ 车台 21(900/1100)+ 22(1000)→ 已秤数 3、已秤丝量 3000 g | | 秤大丝指标 | ✅ 茧量 100×600 = 60000、缫折 = 60000/3000×100 = 2000、台产 = 3000/9/20 = 16.67 | | 删除后无残留 | ✅ 删除秤大丝/丝片检查/丝片台帐后列表回到 0 条,「删除后重建」不再撞唯一索引 | | 测试数据清理 | ✅ 验证用的丝片检查、丝片台帐、秤大丝数据已全部删除;`LsjlRecords.Tongshu/Meitongjianliang` 已还原为 0 | > 验证方式:另编一份 Api 到 `obj\verify\`,以真实库在 3000 端口启动(原无进程占用该端口),验证完已停止实例并删除临时输出与日志。 > Node 不在默认 PATH 里,需先 `set PATH=C:\Users\32453\.workbuddy\binaries\node\versions\22.22.2-6;%PATH%` 才能跑 vite;最终 `vite build` 已通过。 --- ## 五、说明与后续 1. **落丝记录新增两个字段**:`Tongshu`(落丝桶数)、`Meitongjianliang`(每桶茧量)是秤大丝算茧量/缫折/台产的必需输入,F9 的 `Lsjl` 实体也有这两个字段(本系统此前漏移植),已在落丝记录表单补上录入项。 2. **秤大丝删除**:F9 客户端没有删除按钮(只有 `Cds_Lsjl_DeleteCommand` 未暴露),本系统在列表加了「删除」,用于清除误录的称重数据;默认按 F9 的粒度整条(汇总 + 车台明细)物理删除。 3. **未移植 F9 的本地设备能力**:`Page_Cds_Edit` 依赖串口电子秤 + 语音播报 + 本地缓存(`CacheLocalfileService`),Web 端不支持,改为直接录入;偏重/偏轻的语音提示折算UI 上的单元格着色。 4. **未移植 HS\XCJC(现场检查)**:F9 只有 `Xcjc` 实体、没有对应页面(未见 `Page_Xcjc*`),本次不做;如有需要可单独加一组「温度/湿度/车速」维护页。 5. **待接入**:① 秤大丝/丝片检查/丝片台帐的 Grid++ 打印`(报表中心目前只有 `lsjl.grf`);② 历史的 `biz_prod_hs_cds_*` / `biz_prod_hs_spjc` / `biz_prod_hs_sptz` 数据导出后可按工作进度-13 的 CSV 内嵌 + 幂等策略导入;③ 缫折/台产可作为成本核算与计件工资的数据源。