新增工资/仓储/生产日报等模块,移除旧考勤模块

- 新增 PayRoll(工资)、Wms(仓储)、Prod(车速/缫丝/考勤/丝片检测/丝片台账/纤检日报/质量日报) 模块
- 新增对应 Domain 实体、Application DTO/Service、Api Controller 与前端页面
- 移除旧 Attendance 考勤模块(Controller/Service/Entity/DTO 及 5 个前端页面),由 Prod/Kaoqin 取代
- 调整路由、仪表盘、Lsjl 流丝记录实体与服务
- 更新业务种子数据与 DbSeeder
- 补充工作进度文档 14-27
This commit is contained in:
yanpeng200212
2026-10-27 09:09:57 +08:00
parent 69c4052a64
commit 1f1b184411
119 changed files with 21576 additions and 1668 deletions
+170
View File
@@ -0,0 +1,170 @@
# 工作进度-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 中已被注释,故未移植
## 九、下次接续提示
- 重启后端服务后,新表 / 新列才会在启动时建立
- 继续做财务审核时,需新增通用审核记录与生丝出入库审核接口,并在两个列表页加「财务审核状态」列 + 批量审核 / 反审核按钮
- **每轮对话结尾记得生成本工作进度文档**