- 新增 PayRoll(工资)、Wms(仓储)、Prod(车速/缫丝/考勤/丝片检测/丝片台账/纤检日报/质量日报) 模块 - 新增对应 Domain 实体、Application DTO/Service、Api Controller 与前端页面 - 移除旧 Attendance 考勤模块(Controller/Service/Entity/DTO 及 5 个前端页面),由 Prod/Kaoqin 取代 - 调整路由、仪表盘、Lsjl 流丝记录实体与服务 - 更新业务种子数据与 DbSeeder - 补充工作进度文档 14-27
9.6 KiB
工作进度-14:生产-前缫「煮茧日报」落地
时间:2026-10-22(承接工作进度-13) 需求:把
D:\AntaiProject - 副本生产-前缫的「煮茧日报(ZJRB)」移植进本系统。 参考实现:WinClient\F9.Business.Prod\QS\ZJRB\(Page_Zjrb、Page_Zjrb_EditV2)、Application\CQRS\Business\PROD\QS\ZJRB\(Zjrb_SaveCommand / Zjrb_DelCommand / CalculateJizuSaosiHoursCommand)、Domain\Entities\Business\PROD\QS\(Zjrb / ZjrbJizu / Zjrb_Banci / ZjrbJizuBanci)。
一、功能设计
生产-前缫
├── 机组车台
├── 落丝记录
├── 车间班次
├── 看台排班
├── 看台记录
└── 煮茧日报(本次新增) /prod/qianxian/zjrb
过滤:账期(月份)+ 车间(前缫)+ 庄口/规格关键字
主表:日期、上日、车间、庄口、规格;上存/领入/今缫/退回/今存(包数 + 重量,多级表头)
选中行 → 下方联动展示该日报的「机组」桶数明细(含合计行)
按钮:删除、新增、修改、计算缫丝时长
| F9 行为 | 本系统实现 |
|---|---|
| 列表按「账期(月份)+ 车间 + 关键字」查询,无分页 | 同口径,另加后端分页(pageIndex/pageSize) |
| 上表主表 + 下表机组联动(点击行刷新机组) | 同左(主表 row-click → GET /{id}/jizus) |
删除:四张表级联删除 |
DELETE /api/prod/zjrb/{id}(主表 + 班次 + 机组 + 机组班次物理删除) |
新增:按上一日结存带出上存、每桶茧量、工艺落丝桶数 |
GET /defaults?date=&depId=&gyzkId=&guige= |
修改:回填主表 + 班次 + 机组 + 机组班次 |
GET /{id} |
保存:主表 + 三层明细一起提交 |
POST /save(主表 upsert + 三层明细先删后建) |
计算缫丝时长:按「日期 + 车间」整日重算 |
POST /calculate-saosi-hours?date=&depId= |
计算口径(移植 Page_Zjrb_EditV2 的 CalItem / Cal_Zhibiao / Cal_Zhibiao_Main,前后端同口径、服务端保存时重算):
机组.今缫桶数 = 甲班今缫 + 乙班今缫
机组.今存桶数 = 上存 + 今缫 − 今落
(今落为 0 且余量 ≥ 工艺落丝桶数时,自动把今落置为工艺落丝桶数再扣减)
班次.今缫重量 = 该班次机组今缫桶数 × 每桶茧量 ÷ 1000 (每桶茧量单位 g,重量 kg)
班次.领入/退回重量 = 包数 × 联统茧标重
班次.今缫包数 = 今缫重量 ÷ 联统茧标重(四舍五入取整)
班次.今存 = 上存 + 领入 − 今缫 − 退回
主表 = 甲班 + 乙班(包数/重量各 5 项)
校验(对齐 F9 AddValidRules,前端拦截 + 服务端兜底):每桶茧量 > 0、工艺落丝桶数 > 0、上存包数 > 0 时上存重量必须 > 0、机组今缫桶数 > 0 时缫丝时长必须 > 0、机组缫丝时长 ≤ 20、同「日期 + 车间 + 庄口 + 规格」唯一。
二、后端
2.1 实体(Domain/Entities/Prod/Zjrb.cs)
| 类 | 表 | 主要字段 |
|---|---|---|
ZjrbRecord |
ZjrbRecords |
Date、DeptId、GyzkId、Guige、LastDate、StandardLuositongshu、MeitongJianliang + 包数/重量各 5 项 |
ZjrbJizu |
ZjrbJizus |
ZjrbId、Jizu、JizuSaosiHours、TongshuShangcun/Jinsao/Jinluo/Jincun |
ZjrbBanci |
ZjrbBancis |
ZjrbId、Banci(甲/乙)、包数/重量各 5 项 |
ZjrbJizuBanci |
ZjrbJizuBancis |
ZjrbId、ZjrbJizuId、Jizu、Banci、TongshuJinsao |
均继承
BaseEntity(自增主键 + 软删除),表结构由启动时CodeFirst.SyncStructure自动创建,无需迁移。 F9 的Zjrb_Banci.BanciId(指向车间班次)在本系统直接落Prod_Banci_Enum(甲=1/乙=2),与看台排班/看台记录一致。
2.2 服务与接口(ZjrbService / ZjrbController,路由 api/prod/zjrb)
GET /api/prod/zjrb/list?dateFrom=&dateTo=&depId=&like=&pageIndex=&pageSize=
GET /api/prod/zjrb/{id} 修改回填(主表 + 班次 + 机组)
GET /api/prod/zjrb/{id}/jizus 机组明细(列表页下半表)
GET /api/prod/zjrb/defaults?date=&depId=&gyzkId=&guige= 新增默认值
POST /api/prod/zjrb/save 整条保存
DELETE /api/prod/zjrb/{id} 级联删除
POST /api/prod/zjrb/calculate-saosi-hours?date=&depId= 计算缫丝时长
- 新增默认值来源:同「车间 + 庄口(+ 规格)」下
Date < 目标日期的最近一条日报 → 上存包数/重量 = 上一日今存;每桶茧量、工艺落丝桶数、LastDate一并继承; 班次行按「车间班次」配置(未配置则甲乙两班)生成,机组行按「机组车台」生成; - 联统茧标重取参数配置
生产\前缫\煮茧 → 联统茧标重(本库已配置为 18),随默认值/回填一并下发,弹窗内可临时调整; CalculateJizuSaosiHours算法(对齐 F9):机组「今缫桶数 > 0」的班次数为 2 → 18 小时,否则 9 小时; 按「庄口 + 规格 + 机组」分组,以Σ(每桶茧量 × 机组今缫桶数)为权重把机组总时长按比例分配到各条日报的机组行。
2.3 菜单
DbSeeder.SeedProdMenus 生产-前缫子菜单新增第 6 项,并做排序归一:
| 顺序 | 菜单 | 路径 | 组件 | 权限标识 |
|---|---|---|---|---|
| 6 | 煮茧日报 | /prod/qianxian/zjrb | prod/zjrb/index | prod:zjrb:list |
启动日志:[DbSeeder] 生产模块菜单已就绪(生产-前缫 / 生产-后缫),/auth/menus 已返回 6 个子菜单。
三、前端
| 文件 | 说明 |
|---|---|
views/prod/zjrb/index.vue |
日报列表(账期月份 + 车间 + 关键字)、主表多级表头、选中行联动机组明细、合计行、删除/新增/修改/计算缫丝时长 |
views/prod/zjrb/ZjrbEditDialog.vue |
录入弹窗:基础信息 + 班次网格(甲乙班 5 组包数重量)+ 机组网格(时长/上存/甲乙班今缫/今落),改动即时重算 |
router/index.js |
componentMap 注册 prod/zjrb/index |
交互要点:
- 新增时选「工艺庄口 / 规格」后自动带出上一日结存与机组行,并用
ElMessage提示「未维护机组车台」等异常; - 弹窗内今缫重量/今缫包数/今存/今缫桶数/今存桶数均为只读派生值,避免与口径冲突;
- 删除与计算缫丝时长均二次确认(计算会覆盖该日该车间全部机组时长)。
四、验证记录
| 项 | 结果 |
|---|---|
dotnet build(Domain/Application/Infrastructure) |
✅ 0 错误 |
dotnet build(Api,临时输出目录,规避运行中进程文件锁) |
✅ 0 错误 |
vite build |
✅ 通过(仅既有体积/SignalR 注释警告) |
| 菜单 | ✅ 生产-前缫 6 个子菜单,煮茧日报排第 6 |
| 保存(甲乙班 + 2 机组,每桶茧量 600g、标重 18) | ✅ 主表今缫 = round(54/18) = 3 包 / 54 kg;主表五组值 = 甲乙相加 |
| 机组今存自动补落丝 | ✅ 机组 上存 50 + 今缫 60 = 110 < 170(工艺落丝桶数)→ 今落 0、今存 110 |
| 计算缫丝时长 | ✅ 机组1(单班)9 h、机组2(甲乙班均有今缫)18 h,提示「已更新 1 条机组缫丝时长」 |
| 新增默认值 | ✅ 次日带出:上日 2026-10-22、上存 28 包 / 1686 kg、机组上存 110 / 110、每桶茧量 600、落丝桶数 170、标重 18 |
| 唯一性 | ✅ 同「日期 + 车间 + 庄口 + 规格」再存返回 400「已存在相同的煮茧日报!」 |
| 修改 | ✅ 甲班领入 20 → 30 包后:今存 36 + 14 = 50 包 / 1068 + 456 = 1524 kg |
| 删除 | ✅ 删除后列表为该日 0 条、回读返回「煮茧日报不存在或已删除」 |
| 删除后重建无残留 | ✅ 机组桶数 90 / 130 / 0 / 220 未翻倍(三层明细先删后建生效) |
| 测试数据清理 | ✅ 验证用日报已全部删除,未在库中留下业务数据 |
验证方式:用
-p:BaseOutputPath=obj\verify\另编一份 Api,在 3001 端口以真实库启动(ConnectionStrings__Default+Kestrel__Endpoints__Http__Url覆盖),验证完已停止该实例。 3000 端口的后端进程已重启(旧进程无api/prod/zjrb控制器,首次进入菜单会 404 并提示「请求失败,请稍后重试」);重启后GET /api/prod/zjrb/list返回 200,/auth/menus生产-前缫为 6 项。
五、说明与后续
- 未导入历史数据:本次没有随附煮茧日报的导出数据(xlsx/csv),故未做
ProdSeedData扩展;如需把 F9 的biz_prod_qs_zjrb*四张表导入,可按工作进度-13 的 CSV 内嵌 + 幂等策略追加(主表按「日期+车间+庄口+规格」、机组按「日期+机组」、班次按「日期+班次」)。 - 保存语义更严格:F9 的
Zjrb_SaveCommand是逐行 upsert(前端删行不会落库),本系统为「整条替换」(三层明细先删后建),行被移除时会真正删除。 - 机组行不再过滤全 0 行:与 F9 现用保存命令一致(旧
CreateZjrbCommand会过滤三桶数全 0 的机组行)。 - 联统茧标重:读取参数配置
生产\前缫\煮茧 → 联统茧标重(当前 18);未配置时重量换算按录入值保留,不会清零。 - 待接入:① 计件工资(F9
CalcLdcct用「机组班次今缫桶数 × 每桶茧量」)已具备数据基础,可在薪酬模块直接取用;② 落丝记录联动(F9 用煮茧的每桶茧量/机组落丝桶数回填落丝记录)——本系统落丝记录暂无桶数/每桶茧量字段,需先扩展;③ 报表「煮茧日报月报 / 机组缫丝时长 / 联统茧盈亏」可基于ZjrbRecords + ZjrbJizus直接做数据源。