JhHardwareWRS/docs/api.md
2026-06-24 15:19:14 +08:00

98 lines
4.7 KiB
Markdown
Raw Permalink 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.

# 嘉恒智能报工小程序接口边界
小程序端不能直连 MySQL。生产环境需要一个 HTTPS 后端服务,使用环境变量读取数据库连接信息,并调用微信服务端接口完成手机号解密、订阅通知和小程序码生成。
## Excel 字段
本次读取到的 `/Users/souplearn/Downloads/产品清单.xlsx` 表头为:
`项目号、型材号、产品名称、物料编码、物料名称、使用设备、工序、冲压方式、操作人数、不包含物料转运节拍、标准节拍`
导入产品时:
- `型材号` 保存到 `products.profile_no`
- `使用设备` 保存到 `products.device_no`
- `不包含物料转运节拍` 忽略,不进入小程序业务。
- `标准工作量` 如果 Excel 没有提供,由后端按 `28800 / 标准节拍` 生成 8 小时日标准量。
- Excel 中空白 `项目号` 建议沿用上一行项目号,导入前端也应展示导入预览和错误行。
## 推荐接口
### 登录
- `POST /api/auth/wechat-login`
- `GET /api/auth/me`:获取当前账号和同一手机号下的所有角色。
- `POST /api/auth/switch-role`:已登录账号切换当前角色,返回新的 token。
- 入参:`code`、`encryptedData`、`iv` 或新版本手机号授权凭证。
- 逻辑:获取手机号后,在 `personnel` 表匹配;多个手机号时返回人员表中存在的手机号供用户选择。
- 返回当前人员、角色、token。
### 产品
- `POST /api/products/import`上传《产品清单》Excel解析并 upsert。
- `GET /api/products`:分页、关键词、设备号筛选。
- `POST /api/products`:新增或修改产品。
- `DELETE /api/products`:按 `project_no + product_name + device_no + process_name` 删除产品。
产品唯一键为:`项目号 + 产品名称 + 使用设备号 + 工序`。
### 人员
- `POST /api/people/import`上传《人员清单》Excel字段为电话号、姓名、角色。
- `GET /api/people`:分页和关键词筛选。
- `POST /api/people`:新增或修改人员。
- `DELETE /api/people/:phone?role=worker`:删除手机号下的某个角色。
人员口径:一个手机号绑定一个姓名,同一手机号可以有多个角色;登录时如果该手机号只有一个角色,直接登录,如果有多个角色,小程序会要求选择本次登录角色。
### 设备二维码
- `POST /api/devices/:deviceNo/qrcode`
- 后端调用微信 `getUnlimitedQRCode`scene 建议为 `deviceNo=20%23`page 为 `pages/clock/clock`
- 返回可打印的小程序码图片地址。
### 扫码报工
- `GET /api/clock/state?deviceNo=20%23`
- `POST /api/clock/start`
- `POST /api/clock/switch-device`
- `POST /api/clock/finish`
状态规则:
- 没有 active session只返回 `开始上班`
- 有 active session 且设备没出现过:只返回 `换设备`
- 有 active session 且设备出现过:只返回 `下班报工`
- 点击 `下班报工` 后进入 reporting session30 分钟内返回 `继续报工`,员工可继续填写原报工。
- 超过 30 分钟未提交时返回 `重新报工`,员工点击后更新下班时间为重新报工时间,再重新填写报工。
### 报工提交
- `GET /api/reports/draft?sessionId=...`:按设备号拉取产品候选项。
- `POST /api/reports`:员工确认提交,`report_date` 使用确认提交当天日期。
- 报工草稿和提交都会校验 30 分钟填写有效期;超时必须重新扫码点击 `重新报工`
- `GET /api/reports/mine`:员工按日期查看自己的报工记录。
### 审核
- `GET /api/reviews/pending`:管理员待审核报工。
- `POST /api/reviews/:reportId/approve`:管理员通过,或修正明细后通过。
- `POST /api/reviews/:reportId/reject`:管理员驳回并写原因。
- `PATCH /api/reports/:reportId/break-minutes`:仅经理可修改休息间隔,必须写 `report_audit_logs`
- `GET /api/reviews/mine`:管理员自己的审核记录,支持日期筛选。
### 经理看板
- `GET /api/dashboard/reports?startDate=YYYY-MM-DD&endDate=YYYY-MM-DD&page=1`
- 后端只统计 `approved` 报工,并按 `report_date + employee_phone` 合并。
- 返回实际节拍、标准节拍、节拍正负百分比、报工数量、标准工作量、工作量正负百分比。
## 关键计算口径
- 报工日期:员工点击提交后再确认的日期。
- 有效工时:`下班时间 - 上班时间 - 休息间隔`,休息间隔只能经理修改。
- 实际节拍:`有效工时秒数 / (成品数量 + 不良数量)`,报废计入不良数量。
- 标准节拍:按明细产出数量加权平均。
- 标准工作量:使用产品表导入或手动维护的 `标准工作量`,多条明细时累加。
- 工作量对比:`(成品数量 - 标准工作量) / 标准工作量`。