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

7.8 KiB
Raw Permalink Blame History

工作进度-19:生产 · 选剥茧 模块移植(后端完成)

协作规则(长期生效):每次对话结尾都要生成工作进度。 即在每轮对话结束前,把本轮完成的内容追加为 工作进度/工作进度-N.md,并在文档中保留本条规则,方便下一轮接续。

一、任务目标

将老系统「生产 - 选剥茧」模块移植到新系统。老系统位置:D:\AntaiProject - 副本\trunk\WinClient\F9.Business.Prod\XBJ。

模块构成(老系统两个子功能 + 三张表):

老系统 说明
XBJ\XJRB\Page_Xjrb.cs 选茧日报:某日某工艺庄口一条,记录干茧领入与 8 类茧
XBJ\XJRB\Page_XjrbPlan.cs 选茧计划:按领料单(原料出库单)下达,含计划盈亏与完成标记
XBJ\XJRB\Page_XjrbItem_Edit.cs 计划明细:挂在计划下的每日选茧进度行
XBJ\XJBZ\Page_xjpbbanzu.cs 选茧班组:班次(甲/乙)+ 选茧组,含班组职工

新系统此前没有该模块(prod/zjrb 是煮茧日报,不是选茧日报),需从零建。

二、核心业务规则(移植关键,务必照此实现)

1. 选茧日报字段(8 类茧 + 退回)

干茧领入(包数/重量)、联统茧、好五级茧、六级茧、绵茧、双宫茧、下脚茧、茧衣、茧花(各包数/重量)、 退回(包数/重量)、合计重量、联统率、盈亏。 合计重量 = 上述 8 类重量之和(不含退回、不含领入)。

2. 盈亏 / 联统率计算(对齐 F9 GetXjrbCountYingkuiQuery + GetXjrbLingruStartDateQuery)

步骤 1  起始日期(GetLingruStartDate):
        history = 同庄口 且 Date < 当前日期 的日报,按日期降序(排除自身)
        startDate = 当前日期
        for item in history(由新到旧):
            if item.LiantongRate != 0: break        // 遇第一条已结算记录停止
            startDate = item.Date                    // 否则继续往前推
步骤 2  累计区间 = [startDate, 当前日期] 闭区间(排除自身)
步骤 3  累加(初值 = 当前表单输入值):
        ltj  = 当前联统茧重量   + Σ item.LtjZhongliang
        yllr = 当前干茧领入重量 + Σ item.Yl_lr_zhongliang
        all  = 当前 8 类重量之和 + Σ item 同样 8 类重量之和
步骤 4  公式:
        联统率 = yllr != 0 ? (ltj / yllr) * 100 : 0
        盈亏   = all - yllr

要点:起始日期不是简单取"上月结存日",而是往回跳过所有 LiantongRate == 0(未结算)的记录, 遇到第一条已结算记录才停 —— 这是最容易实现错的地方。

3. 计划维度盈亏(口径与日报不同)

联统率 = 联统茧包数 ÷ (联统+好五级+五级+双宫+下脚+茧衣+茧花 包数之和) × 100   ← 按「包数」
盈亏   = 累计选出总重量 − 计划原料领入重量(YlZhongliang)

老系统仓储里 wjjBaoshu / wjjZhongliang 的源字段交叉写反(疑似 bug), 本移植已按正确字段聚合(SUM(WjjBaoshu)→包数、SUM(WjjZhongliang)→重量), 若业务上必须与老系统完全一致(含 bug),可改回。

4. 标包重(老系统在客户端计算,尚未移植)

老系统从注册表 生产\选剥茧 读取各品类标包重,重量 = 包数 × 标包重:

注册表键 说明
联统茧标包重
好五级茧标包重
六级茧标包重
棉茧标包重
双宫茧标包重
下脚茧标包重
茧衣标包重

茧花、退回无标包重,手工录入。 前端实现时需提供该配置入口(新系统暂无等价的注册表服务,待定:可做成常量配置或新增配置表)。

5. 选茧班组

  • 班组 = 班次(甲/乙)+ 选茧组;班组职工来自「选剥茧车间」下工种为「选茧工」的在职职工
  • 没有独立新增入口:由「编辑录入」勾选职工 + 填组别后整体保存(按班次覆盖:先清该班次旧职工与班组,再重建)
  • 计划完成(IsFinish)后禁止修改/删除明细

三、本次完成(后端)

新建文件

文件 内容
Domain/Entities/Prod/Xjrb.cs XjrbRecord / XjrbPlan / XjrbItem 三个实体(表 XjrbRecords、XjrbPlans、XjrbItems)
Domain/Entities/Prod/XjpbBanzu.cs XjpbBanzu / XjpbBanzuZhigong(表 XjpbBanzus、XjpbBanzuZhigongs)
Application/Dtos/Prod/XjrbDtos.cs 日报 / 计划 / 明细 / 班组 的列表与保存 DTO,含 XjrbYingkuiDto
Application/Services/Prod/XjrbService.cs IXjrbService + 实现(盈亏、计划、班组全部逻辑)
Api/Controllers/Prod/XjrbController.cs 路由前缀 api/prod/xjrb

修改文件

  • Application/DependencyInjection.cs:新增 services.AddScoped<IXjrbService, XjrbService>(); (新系统 DI 是手动注册,不是反射扫描,新增 Service 必须补这一行)

接口清单(api/prod/xjrb)

方法 路由 说明
GET `` 日报分页(start / end / like 庄口关键字)
GET {id} 日报详情
POST `` 保存日报
DELETE {id} 删除日报
POST count-yingkui 计算盈亏 / 联统率(保存前调用回填表单)
GET plan 计划分页
GET plan/{id} 计划详情
POST plan 保存计划
DELETE plan/{id} 删除计划(已完成则拒绝)
GET plan/{planId}/items 计划明细列表
POST plan/item 保存明细(勾选完成后回写计划盈亏)
DELETE plan/item/{id} 删除明细
POST plan/count-yingkui 计划维度盈亏
GET banzu 班组分页
GET banzu/{id}/zhigong 班组职工
POST banzu/zhigong 班组「编辑录入」批量保存

四、踩坑记录

  1. BaseEntity 的命名空间:在 F9WebAiTest.Domain.Common,实体文件必须 using F9WebAiTest.Domain.Common;,光有 FreeSql.DataAnnotations 不够(会报 CS0246)。
  2. DI 手动注册:新增 Service 必须在 DependencyInjection.cs 里 AddScoped,否则运行时报未注册。
  3. 编译 Api 会被运行中的进程锁死 DLL(MSB3021 / MSB3027)。 验证代码是否编译通过的正确做法:筛选 error CS(忽略 MSB),或单独编译 Application 项目。

五、验证情况

  • F9WebAiTest.Application 编译:已成功生成
  • F9WebAiTest.Api 编译:无 error CS(Controller 通过)
  • 新表由 DbSeeder.SyncStructure 反射扫描 BaseEntity 子类自动建表,无需手写迁移

六、待办(下一轮)

  1. 前端页面(web/src/views/prod/xuanjian/):
    • 选茧日报列表 + 编辑弹窗(含「计算盈亏」按钮,调用 count-yingkui 回填)
    • 选茧计划列表 + 计划明细(主从联动)
    • 选茧班组(班组列表 + 职工联动 + 「编辑录入」弹窗)
  2. 标包重配置:确定新系统的存放方式(建议做成系统配置或常量),前端按 重量 = 包数 × 标包重 自动算
  3. 路由 + 菜单:web/src/router/index.js 加路由,菜单种子数据加「生产 - 选剥茧」
  4. 「编辑录入」取职工:需要「选剥茧车间 + 选茧工工种」筛选员工的接口(需确认新系统员工/工种接口)
  5. 重启后端服务后新表才会建立

七、下次接续提示

  • 前端实现时,选茧日报的**「计算盈亏」按钮是核心交互**:填完包数/重量后点它,把返回的 liantongRate / yingkui / startDate(提示"从 xxx 开始计算")回填到表单,再保存
  • 计划明细勾选「选茧完成」保存时会直接把计划置为已完成并回写盈亏,之后不可再改
  • 每轮对话结尾记得生成本工作进度文档