feat(mes): 添加定时同步可生产数量到WMS及BOM项相关标准字段
- 在main.go中添加定时任务每10分钟同步可生产数量到WMS系统 - 为BomItem实体添加relatedStandard字段及相关CRUD方法 - 为InspectionRecord实体添加reportNo、materialCode、materialName等字段 - 更新ent schema确保新字段的验证和默认值设置 - 添加必要的数据库迁移和字段映射逻辑
This commit is contained in:
@@ -38,7 +38,9 @@ export const helpWorkOrder = {
|
||||
{ name: '产品名称', source: '手工填写。通常与产品型号名称一致。', purpose: '产品中文名,用于展示', fill: '如 智能电表' },
|
||||
{ name: '数量', source: '手工填写整数。', purpose: '本工单生产总数量(合同台数),决定需求量与排产上限', fill: '整数 ≥1,如 100' },
|
||||
{ name: '工位组合', source: '勾选要经过的工位(工位数以数据库为准)。', purpose: '本工单要经过的工位集合,产线设备按此组合下发控制产线', fill: '勾选要经过的工位即可,系统自动按工位号顺序执行(传送带不回走);半成品再上线可只勾漏做的工位' },
|
||||
{ name: '状态', source: '新建时选"已创建",后续由流程推进。', purpose: '工单生命周期:创建→发布→生产→完成', fill: '新建时选"已创建";也可在列表操作列点「状态」快捷流转(发布/开工/完工)' }
|
||||
{ name: '状态', source: '新建时选"已创建",后续由流程推进。', purpose: '工单生命周期:创建→发布→生产→完成', fill: '新建时选"已创建";也可在列表操作列点「状态」快捷流转(发布/开工/完工)' },
|
||||
{ name: '完成日期', source: '手工填写,完工时必填。', purpose: '记录工单实际完成日期,用于交付与绩效统计', fill: '完工流转时选择日期,必填' },
|
||||
{ name: '创建人', source: '系统自动记录(当前登录账号)。', purpose: '追溯工单由谁创建', fill: '只读,自动带入' }
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -47,6 +49,16 @@ export const helpWorkOrder = {
|
||||
fields: [
|
||||
{ name: '工位组合', source: '勾选要经过的工位。', purpose: '本工单经过的工位集合,产线设备组合下发', fill: '勾选即可,按工位号顺序执行;全选=全部工位' }
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '自动排产(引导式)',
|
||||
overview: '列表页「自动排产」按钮:选工单 + 日期区间 + 排产方式,一键把工单未开工数量分摊到多天日排产。',
|
||||
fields: [
|
||||
{ name: '日期区间', source: '日历选择起止日期。', purpose: '在哪段时间内排产', fill: '选开始/结束日期' },
|
||||
{ name: '排产方式', source: '二选一:平均分摊 / 固定日产。', purpose: '决定每天排多少', fill: '平均分摊=总量÷天数自动均分;固定日产=每天排指定数量,排满为止' },
|
||||
{ name: '每日数量', source: '固定日产方式下手工填写。', purpose: '固定每天的生产量', fill: '选固定日产时填写,如每天 20' },
|
||||
{ name: '生成', source: '一键生成日排产记录。', purpose: '批量创建该工单的日排产,合计不超过工单未开工数量', fill: '确认后生成,可到「日排产」页查看/调整' }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -61,7 +73,8 @@ export const helpDailyPlan = {
|
||||
{ name: '计划数量', source: '手工填写整数。', purpose: '这一天计划生产多少件', fill: '整数≥1;注意:该工单所有日排产的数量合计不能超过工单总数量' },
|
||||
{ name: '送达接驳台', source: '排产时人工确认(可多选 DOCK01~20产线 / DOCK21库房)。', purpose: '该工单物料经 AGV 送到哪些接驳台(DOCK n↔工位n),备料单据此填 target_dock', fill: '默认推荐该工单上次使用的接驳台,可修改;至少选一个。AGV 按把这些料送到对应工位' },
|
||||
{ name: '已完成', source: '系统自动累计。只读。', purpose: '该排产已实际完成多少件', fill: '无需填写' },
|
||||
{ name: '状态', source: '系统维护。只读。', purpose: '排产执行状态(待排产/已确认)', fill: '无需填写' }
|
||||
{ name: '状态', source: '系统维护。只读。', purpose: '排产执行状态(待排产/已确认)', fill: '无需填写' },
|
||||
{ name: '启用/停用', source: '行内开关。', purpose: '停用后该条排产不参与备料/生产,可临时挂起某天计划', fill: '拨动开关切换;停用的排产不计入备料' }
|
||||
]
|
||||
}
|
||||
|
||||
@@ -79,7 +92,9 @@ export const helpBom = {
|
||||
{ name: '管理方式', source: '单选。按物料类型决定,与 WMS 一致。', purpose: '电气件=逐件按SN管理;结构件=按批次管理', fill: '电子件/电气件选"电气件 SN";螺丝等标准件选"结构件 批次"' },
|
||||
{ name: '单台用量', source: '手工填写。', purpose: '生产 1 台产品用的该物料数量', fill: '如每台 8 颗螺丝 → 填 8' },
|
||||
{ name: '损耗率%', source: '手工填写。', purpose: '考虑报废/损耗的加放比例', fill: '如 2% 填 2;0=不计算损耗' },
|
||||
{ name: '需求量', source: '自动计算 = 数量×单台用量×(1+损耗率),可覆盖。', purpose: '该物料总需求,出库不能超它', fill: '一般自动算,不必改' }
|
||||
{ name: '需求量', source: '自动计算 = 数量×单台用量×(1+损耗率),可覆盖。', purpose: '该物料总需求,出库不能超它', fill: '一般自动算,不必改' },
|
||||
{ name: '相关标准', source: '手工填写/导入带入。', purpose: '该物料对应的检验/工艺标准(如国标、图号标准),供质量检验与流程卡引用', fill: '如 GB/T xxx;可在导入模板中一列填入' },
|
||||
{ name: '导入', source: 'Excel 模板导入(列表页「导入」按钮)。', purpose: '批量维护物料清单,减少逐条录入', fill: '下载模板→填写→上传,系统预检(编码/管理方式/数值)并提示错误行,确认后入库' }
|
||||
]
|
||||
}
|
||||
|
||||
@@ -118,17 +133,38 @@ export const helpPlc = {
|
||||
}
|
||||
|
||||
export const helpTorque = {
|
||||
title: '拧紧数据(补录 / 记录查询)',
|
||||
title: '拧紧数据(查询 / 统计 / 审核签字)',
|
||||
overview:
|
||||
'接收丹尼科尔拧紧工具的采集结果(扭矩/角度/时间/结果/操作人),用于质量追溯。\n\n页面分两个页签:「拧紧补录」(默认打开) 补录设备漏传/手工修正的历史数据;「记录查询」(点击才加载) 按 SN / 工单号(均不区分大小写) 查询拧紧记录。\n\n实时采集不在本页:数据在工位终端/产线设备 报工时由拧紧枪自动同步到 MES;本页补录仅用于设备漏传或手工修正历史,补录记录操作人自动标记「(补录)」并写入操作日志。',
|
||||
fields: [
|
||||
{ name: '工单号 / SN', source: '补录必填,手工填写。', purpose: '补录记录挂靠的工单与工件', fill: '设备漏传时补填对应工单号与 SN' },
|
||||
{ name: '工位', source: '手工填写。', purpose: '拧紧发生在哪道工位', fill: '如 5,可空' },
|
||||
{ name: '螺丝号', source: '手工填写。', purpose: '同一工件多颗螺丝时区分第几颗', fill: '如 S1,可空' },
|
||||
{ name: '扭矩(N·m) / 角度(°)', source: '正常由拧紧枪自动采集;补录时手工填写。', purpose: '实际拧紧扭矩与旋转角度,判定是否达标', fill: '按实际值填写' },
|
||||
{ name: '结果', source: '单选 合格/不合格。', purpose: '拧紧判定结果', fill: '默认 OK' },
|
||||
{ name: '补录原因', source: '手工填写,必填。', purpose: '说明为何补录,留痕审计', fill: '如:设备漏传 / 手工修正' },
|
||||
{ name: '查询(SN / 工单号)', source: '「记录查询」页签筛选条件,不区分大小写。', purpose: '只看指定工件/工单的拧紧记录', fill: '可空=全部' }
|
||||
'接收丹尼科尔拧紧工具的采集结果(扭矩/角度/时间/结果/操作人),用于质量追溯。\n\n数据接入(TCP 抽象):拧紧枪数据由工位终端采集后自动上报 MES;内置模拟数据源供联调(正式丹尼科尔协议接入后直接插入同一链路,无需改页面)。本页不提供后台手工补录。\n\n一级按「工单号 + SN + 工位」汇总,并按工艺文件自动判定「应拧 vs 实拧」是否满足;点「拧紧结果」进二级明细,逐颗查看并审核签字。',
|
||||
sections: [
|
||||
{
|
||||
title: '查询条件',
|
||||
overview: '四条件复合取交集,SN / 工单号 不区分大小写。',
|
||||
fields: [
|
||||
{ name: 'SN / 工单号', source: '手工填写。', purpose: '按工件或工单缩小范围', fill: '可空=全部;不区分大小写' },
|
||||
{ name: '工位', source: '手工填写。', purpose: '只看某道工位的拧紧汇总', fill: '如 3,可空' },
|
||||
{ name: '日期区间', source: '日期选择器。', purpose: '按采集时间筛选', fill: '选开始/结束日期,含当天' }
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '一级汇总与统计',
|
||||
overview: '每行代表一个工件在某工位的拧紧总体情况。',
|
||||
fields: [
|
||||
{ name: '拧紧数量(应拧/实拧)', source: '应拧数来自工艺流程 isTorque 步骤数;实拧数来自拧紧记录。', purpose: '对比工艺要求与实际拧紧颗数', fill: '只读;应拧显示「未配置」表示该工位未绑定含扭矩步骤的工艺' },
|
||||
{ name: '合格/不合格', source: '拧紧记录统计。', purpose: '看该工件合格与不合格颗数', fill: '只读;不合格>0 会标红' },
|
||||
{ name: '拧紧结果', source: '系统判定:应拧>0 且 实拧>=应拧 且 无不合格 = 满足。', purpose: '一眼判定该工件拧紧是否达标', fill: '点「满足/不满足」链接进入二级明细' },
|
||||
{ name: '审核状态', source: '系统统计。分组内全部记录已审核才计已审核。', purpose: '提示检验员是否已完成签字', fill: '只读' }
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '二级明细与审核签字',
|
||||
overview: '抽屉顶部展示应拧/实拧/合格/不合格统计,下方逐颗列出拧紧记录。',
|
||||
fields: [
|
||||
{ name: '螺丝号/扭矩/角度/结果', source: '拧紧枪自动采集上报。', purpose: '每颗螺丝的具体拧紧参数与判定', fill: '只读' },
|
||||
{ name: '审核签字', source: '检验员操作,写入审核人/时间。', purpose: '两人签字:操作人(采集自动带入) + 审核人(当前登录账号)', fill: '点「审核签字」→ 填审核意见 → 确认;已审核不可重复' },
|
||||
{ name: '留痕', source: '系统自动记录 torque_audit_log。', purpose: '展示该记录的审核/修改历史时间线', fill: '点「留痕」查看操作人/动作/改前改后/备注' }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -152,7 +188,8 @@ export const helpStation = {
|
||||
fields: [
|
||||
{ name: '工位号', source: '系统固定(工位数以数据库为准),不可增删。', purpose: '产线物理工位编号', fill: '无需填写' },
|
||||
{ name: '工位名称', source: '可编辑。默认如 装配工位1。', purpose: '工位的显示名称', fill: '如 一号装配工位' },
|
||||
{ name: '绑定工艺流程', source: '自动来自本页:为工位选择「启用」的工艺流程即绑定。', purpose: '该工位执行的工艺流程(决定工序步骤/考核标准/PDF)', fill: '到本页为该工位选择启用流程;本页只读展示' }
|
||||
{ name: '绑定工艺流程', source: '自动来自本页:为工位选择「启用」的工艺流程即绑定。', purpose: '该工位执行的工艺流程(决定工序步骤/考核标准/PDF)', fill: '到本页为该工位选择启用流程;本页只读展示' },
|
||||
{ name: '虚拟工位 0 / 13', source: '系统预置。工位号 0=上线位、13=下线位。', purpose: '产线进线口建档上线、出料口完工入库,由 PAD 操作,不连 PLC/拧紧枪', fill: '只读;上线位/下线位在工位终端(PAD)用「上线建档」「下线完工」面板操作' }
|
||||
]
|
||||
}
|
||||
|
||||
@@ -235,7 +272,8 @@ export const helpProcessFlow = {
|
||||
|
||||
{ name: '状态', source: '下拉选择 启用/停用。也可在列表操作列点「启用/停用」快捷切换。', purpose: '启用=该流程可被「关联工位」页绑定到工位并参与生产;停用=不可绑定、不参与生产', fill: '启用后可在「关联工位」页绑定到工位;停用后不可绑定' },
|
||||
{ name: '工艺图纸(PDF)', source: '本页上传。文件由 MES 服务器保存。', purpose: '该工位的作业指导图,工位终端打开预览', fill: '选择 PDF 上传,成功后显示文件名可预览' },
|
||||
{ name: '工序步骤', source: '本页维护(步骤名/采集方式/是否拧紧/考核标准)。', purpose: '手动报工/工位终端报工时按此动态渲染参数输入', fill: '一个流程可含多个工序步骤,按序号顺序执行' }
|
||||
{ name: '工序步骤', source: '本页维护(步骤名/采集方式/是否拧紧/考核标准)。', purpose: '手动报工/工位终端报工时按此动态渲染参数输入', fill: '一个流程可含多个工序步骤,按序号顺序执行' },
|
||||
{ name: '步骤附件/图纸', source: '每个工序步骤单独上传(绑定式)。文件由 MES 服务器保存。', purpose: '把图纸精确绑定到具体步骤,工位终端按当前步骤自动展示对应图纸', fill: '在步骤行上传该步骤图纸/附件(可多个);随工序自动分发到工位终端' }
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -270,7 +308,9 @@ export const helpPerformance = {
|
||||
{ name: '日期范围', source: '筛选条件。来自报工实绩的产生时间,默认近 90 天。', purpose: '按时间段统计', fill: '选择起止日期;导出时同一范围' },
|
||||
{ name: '完成数', source: '自动汇总。该 操作人×日期×工位 的报工次数。', purpose: '工作量核心指标', fill: '只读' },
|
||||
{ name: '合格数/不合格数', source: '自动汇总。按报工实绩 result 字段(合格/不合格)分类计数。', purpose: '质量指标,OK+NG=完成数', fill: '只读' },
|
||||
{ name: '合格率', source: '自动计算 = 合格数/完成数。', purpose: '质量表现', fill: '只读' }
|
||||
{ name: '合格率', source: '自动计算 = 合格数/完成数。', purpose: '质量表现', fill: '只读' },
|
||||
{ name: '平均作业时长', source: '自动计算 = 累计作业时长 ÷ 完成数(取自报工实绩 duration_sec)。', purpose: '衡量单件平均耗时', fill: '只读' },
|
||||
{ name: '效率(件/小时)', source: '自动计算 = 完成数 ÷ (累计作业时长/3600)。', purpose: '衡量单位时间产出', fill: '只读' }
|
||||
]
|
||||
}
|
||||
|
||||
@@ -377,3 +417,46 @@ export const helpQtyReport = {
|
||||
{ name: '状态', source: '系统维护(待处理/已处理)。', purpose: '跟踪闭环进度', fill: '只读,筛选用' }
|
||||
]
|
||||
}
|
||||
|
||||
export const helpQuality = {
|
||||
title: '质量检验(过程检 / 完工检)',
|
||||
overview:
|
||||
'质量检验 = 对物料/产品做检验判定并留痕,分「过程检」与「完工检」两个 Tab。来料检在 WMS 库房侧完成,本页不重复。\n\n录入流程:选图号(输入图号或名称远程检索 BOM 料,自动带出物料名称)→ 填报检单号/生产厂家/检验单号 → 上传附件 → 判定合格/不合格 → 保存。\n\n不合格闭环:结论为「不合格」时可当场选择处置方式(退货/返修/退换)并写处置说明;也可在列表操作列「处置」补录,或点「不合格单」一键导出《不合格单.xlsx》(预填本次检验数据)。\n\n查询:图号 / 物料名称 / 报检单号 / 记录日期范围组合筛选,每个框内模糊匹配、多框取交集;记录按时间倒序,后端真分页。',
|
||||
fields: [
|
||||
{ name: '图号', source: '远程检索 BOM 料(/quality/bom-material),也可手填。', purpose: '被检物料的图号(即物料编码)', fill: '输入图号或名称关键字选择' },
|
||||
{ name: '物料名称', source: '选图号后自动带出,可手改。', purpose: '被检物料名称', fill: '一般无需手填' },
|
||||
{ name: '报检单号', source: '系统自动生成(RQ+时间戳),可改。', purpose: '本次报检的唯一编号,也是附件挂靠键', fill: '一般无需改,须唯一' },
|
||||
{ name: '生产厂家', source: '手工填写。', purpose: '该物料的生产/供货厂家', fill: '如 XX电气有限公司' },
|
||||
{ name: '检验单号', source: '手工填写。', purpose: '对应的检验单据编号', fill: '如 INS-2026-001' },
|
||||
{ name: '附件', source: '上传登记(bizType=quality,bizId=报检单号)。', purpose: '检验报告/照片等佐证材料', fill: '选择文件上传,可多个' },
|
||||
{ name: '检验结论', source: '人工判定。', purpose: '合格(OK)/不合格(NG)', fill: '单选' },
|
||||
{ name: '处置方式', source: '不合格时选择。', purpose: '退货/返修/退换', fill: '仅不合格需填' },
|
||||
{ name: '处置说明', source: '手工填写。', purpose: '补充处置细节', fill: '可空' }
|
||||
]
|
||||
}
|
||||
|
||||
export const helpWip = {
|
||||
title: '在制品(跨天在制视图)',
|
||||
overview:
|
||||
'在制品 = 已进线但尚未完工的工件(状态 已上线/在制/返修),跨天继续停留在此列表中。\n\n数据来源:MES 工件实时状态(GET /workpieces/in-process)。当前工位支持 0=上线位(虚拟)、1~12=物理工位、13=下线位(虚拟),工位数以数据库为准。\n\n与日排产的关系:已进线未完工的工件跨天继续,日排产仅排「未开工数量」,不会重复排产。停留时长自进线起算,便于发现滞留件。',
|
||||
fields: [
|
||||
{ name: '当前工位', source: '按工件状态与工位组合推算。', purpose: '工件此刻停在哪一工位', fill: '只读,可筛选' },
|
||||
{ name: '状态', source: '系统维护。', purpose: '已上线/在制/返修', fill: '只读,可筛选' },
|
||||
{ name: '进度', source: '已完成工序数 / 工位组合总工序数。', purpose: '看该件走到第几步', fill: '只读' },
|
||||
{ name: '停留时长', source: '自上线时间起算。', purpose: '发现长时间滞留的在制品', fill: '只读' }
|
||||
]
|
||||
}
|
||||
|
||||
export const helpAlertCenter = {
|
||||
title: '预警中心(系统自动触发)',
|
||||
overview:
|
||||
'预警中心汇集全系统自动产生的异常/提醒消息,人工无需配置规则——全部由内置触发源自动落库并推送。顶部铃铛角标显示未读数,点击进入本页处理。\n\n八类内置触发源:\n· 扭紧不合格(torque_ng):拧紧扭矩/角度超考核标准时自动告警;\n· 检验不合格(inspection_ng):质量检验判定 NG 时告警;\n· 备料未齐套(material_shortage):工单装机绑定物料未齐套时告警;\n· 库存偏低(inventory_low):可用量低于安全库存时告警;\n· 工单超时(task_overdue):工单超过完成日期未完工时告警;\n· 缓存位满(cache_full):产线缓存/接驳台占满时告警;\n· 数量不符(qty_diff):工位收料实收≠应发时告警(见「数量不符上报」);\n· 应急呼叫(emergency_call):工位终端现场发起的紧急呼叫。\n\n应急呼叫闭环:操作工在工位终端点「应急呼叫」(设备故障/质量异常/缺料/安全等紧急情形)→ 系统即时落一条 type=emergency_call 的未读预警并通过 SSE 推到大屏/看板 → 线长、维修、仓库等相关人员在本页看到未读告警并到场处置 → 处置完点「标记已读」闭环。\n\n处理流程:按状态(全部/未读/已读)筛选,核实后点行末「标记已读」;已读记录留存备查。',
|
||||
fields: [
|
||||
{ name: '状态', source: '系统维护(未读/已读)。', purpose: '区分待处理与已处理预警', fill: '顶部单选筛选:全部/未读/已读' },
|
||||
{ name: '类型', source: '内置触发源自动写入。', purpose: '区分八类预警(含应急呼叫)', fill: '只读' },
|
||||
{ name: '标题 / 内容', source: '触发时系统自动生成。', purpose: '说明预警的具体对象与原因', fill: '只读' },
|
||||
{ name: '关联ID', source: '系统写入(工单号/SN/工位等业务键)。', purpose: '定位预警来源的具体业务对象', fill: '只读' },
|
||||
{ name: '时间', source: '系统记录触发时刻。', purpose: '追溯预警发生时间', fill: '只读' },
|
||||
{ name: '标记已读', source: '人工在本页操作。', purpose: '处置完成后闭环该预警', fill: '核对处置后点「标记已读」' }
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user