Files
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

9.6 KiB
Raw Permalink Blame History

工作进度-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 项。


五、说明与后续

  1. 未导入历史数据:本次没有随附煮茧日报的导出数据(xlsx/csv),故未做 ProdSeedData 扩展;如需把 F9 的 biz_prod_qs_zjrb* 四张表导入,可按工作进度-13 的 CSV 内嵌 + 幂等策略追加(主表按「日期+车间+庄口+规格」、机组按「日期+机组」、班次按「日期+班次」)。
  2. 保存语义更严格:F9 的 Zjrb_SaveCommand 是逐行 upsert(前端删行不会落库),本系统为「整条替换」(三层明细先删后建),行被移除时会真正删除。
  3. 机组行不再过滤全 0 行:与 F9 现用保存命令一致(旧 CreateZjrbCommand 会过滤三桶数全 0 的机组行)。
  4. 联统茧标重:读取参数配置 生产\前缫\煮茧 → 联统茧标重(当前 18);未配置时重量换算按录入值保留,不会清零。
  5. 待接入:① 计件工资(F9 CalcLdcct 用「机组班次今缫桶数 × 每桶茧量」)已具备数据基础,可在薪酬模块直接取用;② 落丝记录联动(F9 用煮茧的每桶茧量/机组落丝桶数回填落丝记录)——本系统落丝记录暂无桶数/每桶茧量字段,需先扩展;③ 报表「煮茧日报月报 / 机组缫丝时长 / 联统茧盈亏」可基于 ZjrbRecords + ZjrbJizus 直接做数据源。