Files
f9-web-ai-test/工作进度/工作进度-18.md
T
yanpeng200212 1f1b184411 新增工资/仓储/生产日报等模块,移除旧考勤模块
- 新增 PayRoll(工资)、Wms(仓储)、Prod(车速/缫丝/考勤/丝片检测/丝片台账/纤检日报/质量日报) 模块
- 新增对应 Domain 实体、Application DTO/Service、Api Controller 与前端页面
- 移除旧 Attendance 考勤模块(Controller/Service/Entity/DTO 及 5 个前端页面),由 Prod/Kaoqin 取代
- 调整路由、仪表盘、Lsjl 流丝记录实体与服务
- 更新业务种子数据与 DbSeeder
- 补充工作进度文档 14-27
2026-10-27 09:09:57 +08:00

171 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 工作进度-18:仓储 · 生丝 模块操作逻辑对齐 F9
> **协作规则(长期生效)**:**每次对话结尾都要生成工作进度**。
> 即在每轮对话结束前,把本轮完成的内容追加为 `工作进度/工作进度-N.md`,并在文档中保留本条规则,方便下一轮接续。
## 一、任务目标
新系统(.NET 8 + Vue 3)的生丝模块功能已具备,但**页面操作逻辑与老系统不一致**。
目标:以老系统 `D:\AntaiProject - 副本\trunk\WinClient\F9.Business.WMS\SS` 为基准,把生丝模块的**操作逻辑改成与老系统一模一样**。
对齐范围(本轮确认):
- 生丝入库 / 出库的**批次驱动录入**
- 生丝**批次报检**的行内操作(过磅 / 包件 / 公量 / 质检 / 纤度检验)
- 出入库**主从联动**
- 财务审核:**本轮不做**,用户选择后续单独处理
## 二、核心差异(新系统改造前的问题)
| 环节 | 老系统做法 | 新系统改造前 |
| --- | --- | --- |
| 入库明细 | 点「选择生丝批次」→ 勾选**待入库批次**,自动带出物资 / 批次号 / 批数 / 包件数 / 毛皮净重 | 手动「添加明细」→ 选物资 + 手填批次号 + 手填重量 |
| 出库明细 | 点「选择批次 + 包件」→ 勾选批次下未出库包件 | 手动录入,批次与包件脱节 |
| 批次状态 | 批次 / 包件级跟踪出库(`Ck_Isck`、`Ck_Baoshu` 等) | 仅按批次号字符串整体置"已出库",包件无跟踪 |
| 批号格式 | 正品 10 位数字 / 其他 `31EE-7位` | 无校验 |
| 主从联动 | 主表点行 → 下方明细联动 | 无,明细只在编辑弹窗 |
| 批次报检操作 | 过磅 / 包件 / 公量 / 质检 / 纤度检验 5 个行内操作 | 只有编辑、删除 |
| 规格 | 下拉选择(生丝规格) | 手填文本框 |
| 生产车间 | 取职责类型为「前缫」的车间 | 取全部部门,未筛选 |
## 三、数据模型变更
### 新增字段(`Domain/Entities/Wms/Wms.cs`)
| 实体 | 新增字段 | 对应 F9 |
| --- | --- | --- |
| `WmsPici` | `RkItemId`、`RkDate`、`CkLastDate`、`CkBaoshu`、`CkJingzhong`、`KcBaoshu` | `Rk_Item_Id`、`Rk_Date`、`CK_LastDate`、`Ck_Baoshu`、`Ck_Jingzhong`、`Kc_Baoshu` |
| `WmsPiciBaojian` | `CkIsck`、`CkItemId`、`CkDate`、`CkJingzhong` | 包件级出库标记 |
| `WmsRukuDetail` | `PiciIds` | `SS_Rk_Item.PiciIds` |
| `WmsChukuDetail` | `PcAndBjIds` | `SS_Ck_Item.PcAndBjIds` |
### 新增实体
| 实体 | 表 | 说明 |
| --- | --- | --- |
| `WmsPiciChuku` | `WmsPiciChukus` | 批次出库记录(回滚时按此重算库存状态) |
| `WmsPiciQc` | `WmsPiciQcs` | 批次质检 |
| `WmsPiciQcXdjy` | `WmsPiciQcXdjys` | 批次纤度检验 |
### 建表 / 加列(`DbSeeder.cs`)
- 新表:由 `SyncStructure` 反射扫描 `BaseEntity` 子类自动建立
- 旧表加列:`EnsureColumn` 兜底(幂等,列已存在则忽略)
## 四、后端改动
### 1. 状态流转(`WmsService.cs`,对齐 F9 CQRS)
- **入库**:`UpdatePiciRukuAsync` 按 `PiciIds` 置批次"已入库",写 `RkItemId` / `RkDate`,`KcBaoshu = Baoshu`
- **入库回滚**:`RollbackPiciRukuAsync`,若批次已出库则抛错禁止修改 / 删除
- **出库**:`UpdatePiciChukuAsync` 按 `PcAndBjIds`(JSON)标记包件 `CkIsck`,写 `WmsPiciChuku`;批次按出库包件数流转「部分出库 / 已出库」
- **出库回滚**:`RollbackPiciChukuAsync` 撤销包件标记、删除出库记录、按剩余记录重算批次状态
- **校验**:待入库不可出库、已全部出库不可再出库
> 注意:`PcAndBjIds` 前端序列化为 camelCase(`piciId` / `piciBaojianIds`),
> 反序列化时必须带 `PropertyNameCaseInsensitive = true`,否则字段匹配不上。
### 2. 批号格式校验(`SavePiciAsync`)
对齐 F9 `Page_PiciBaojian_Edit`:
- 正品(`CodeType = 0`):`^\d{10}$`
- 其他(`CodeType = 1`):`^31EE-\d{7}$`
### 3. 新增接口(`WmsController.cs`)
| 方法 | 路由 | 说明 |
| --- | --- | --- |
| GET | `/api/wms/pici/chuku-select` | 出库选批次(含未出库包件),支持按物资过滤、排除已选批次 |
| GET | `/api/wms/pici/qc/{piciId}` | 读取批次质检 |
| POST | `/api/wms/pici/qc` | 保存批次质检 |
| GET | `/api/wms/pici/xdjy/{piciId}` | 读取纤度检验 |
| POST | `/api/wms/pici/xdjy` | 保存纤度检验 |
### 4. 入库主表补"包数"
`WmsRukuListDto` 新增 `BaojianNum`,由明细 `BaojianNum` 汇总(出库主表老系统无包数列,故未加)。
## 五、前端改动
### 1. 新建 `PiciSelectDialog.vue`
生丝批次选择弹窗,两种模式复用:
- `mode="ruku"`:拉待入库批次(`GET /wms/pici?kcStatus=1`),勾选批次
- `mode="chuku"`:拉批次 + 包件(`GET /wms/pici/chuku-select`),展开行勾选包件,
批次勾选 ↔ 包件勾选双向联动,已出库包件禁用
### 2. `RukuPanel.vue`(生丝入库)
- 明细工具栏:生丝改为「选择生丝批次」,不再自动加空白行
- 入库类型:仅显示「生产(0) / 退货(1)」(对齐 F9"其他暂未开放")
- 按物资分组生成明细,回填 `piciIds` / `piciCodes` / 批数 / 包件数 / 毛皮净重
- 物资、批次号、包件数改为**只读**(由批次带出)
- 主表:新增「包数」列;新增展开行主从联动
- 保存校验:生丝明细必须有 `piciIds`
### 3. `ChukuPanel.vue`(生丝出库)
- 明细工具栏:生丝改为「选择批次包件」
- 出库类型:仅显示「销售(1)」
- 往来单位(客户)改标签为「往来单位」并**必选**
- 明细回填 `pcAndBjIds`(JSON `[{piciId, piciBaojianIds}]`)
- 主表:展开行主从联动
### 4. `SsPici.vue`(批次报检)
- 行内操作补齐:**过磅 / 包件 / 公量 / 质检 / 纤度检验**
- 过磅:仅「待入库」状态可用(否则提示并阻止)
- 包件、公量:复用批次编辑弹窗(编辑包件毛皮重 / 回潮率)
- 质检:新增质检弹窗(对接 `/wms/pici/qc`)
- 纤度检验:新增明细表格弹窗(对接 `/wms/pici/xdjy`)
- **规格**:由手填 `el-input` 改为 `el-select`,数据来自 `GET /shengsiguige/all`
(与 `prod/lsjl` 落丝记录取数口径一致)
- **生产车间**:由"全部部门"改为**仅取职责类型为「前缫」的车间**
```js
import { depOptions, DUTY } from '../../../utils/departments';
const opts = await depOptions({ duty: [DUTY.前缫] }, { flat: true });
deptOptions.value = opts.map((o) => ({ id: Number(o.key), name: o.value, ...(o.raw || {}) }));
```
列表列名同步改为「生产车间」
- 保存校验补齐(对齐 F9 `AddValidateRuls`):日期、规格、品名(生丝规格)、批号、基地外购
> 变量名注意:组件内部门列表变量已改名 `deptOptions`,避免与工具函数 `depOptions` 重名冲突。
## 六、涉及文件
**后端**
- `backend/F9WebAiTest.Domain/Entities/Wms/Wms.cs`
- `backend/F9WebAiTest.Application/Dtos/Wms/WmsDtos.cs`
- `backend/F9WebAiTest.Application/Services/Wms/WmsService.cs`
- `backend/F9WebAiTest.Api/Controllers/Wms/WmsController.cs`
- `backend/F9WebAiTest.Infrastructure/Data/DbSeeder.cs`
**前端**
- `web/src/views/wms/components/PiciSelectDialog.vue`(新建)
- `web/src/views/wms/components/RukuPanel.vue`
- `web/src/views/wms/components/ChukuPanel.vue`
- `web/src/views/wms/components/SsPici.vue`
## 七、验证情况
- 后端 `F9WebAiTest.Application` 编译通过:**0 错误**
- 解决方案整体编译的报错均为 `MSB3021 / MSB3027`(**后端 API 进程正在运行,DLL 被锁定无法复制**),非代码问题
- 前端 lint:0 错误
## 八、待办 / 遗留
1. **财务审核 / 反审核**:老系统生丝出入库均有「财务审核状态」列与批量审核 / 反审核按钮,
新系统尚未实现(本轮用户选择暂缓,后续单独处理)
2. 生丝出库「选择调拨通知单」自动填充明细:老系统有(`Page_Dbtz_Select`),新系统未实现
3. 老系统批次报检的「混装」功能在 F9 中已被注释,故未移植
## 九、下次接续提示
- 重启后端服务后,新表 / 新列才会在启动时建立
- 继续做财务审核时,需新增通用审核记录与生丝出入库审核接口,并在两个列表页加「财务审核状态」列 + 批量审核 / 反审核按钮
- **每轮对话结尾记得生成本工作进度文档**