更新记录

1.0.0(2026-11-06)

首个版本:日历周期与运行小时周期双触发排期,两条线各算一个到期日取先到的一个,并注明触发方式;按「还差多少小时 ÷ 日均运行小时」把小时周期折算成日期;五档状态(已超期/即将到期/本月内/正常/未设周期)计数之和等于设备总数;优先级 = 等级权重 × 2 − 剩余天数,超期排最前但不会把明天到期的 B 级压到十五天后的 A 级下面;未来八周工时负荷,超出每周可用工时的那一周标出超出小时数;八类台账体检(日期非法、日期在未来、读数录反、缺日均小时、日均超 24、缺工时、未设周期、缺编号)逐条列出且单台出错不影响整批;文本台账解析支持逗号/制表符/分号/竖线,表头与注释行自动跳过;明细与周负荷两份 CSV 带 BOM 导出。UTS→Kotlin 编译通过(index.kt 1219 行、classes.dex 53304 字节),139 项回归测试全部通过;真机未执行(测试机锁屏,adb 报 deviceLocked=1),市场截图为 H5 渲染并标注示例数据。


平台兼容性

uni-app

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× √ × × √ × √ × ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

设备保养到期计划

车间设备什么时候该保养、哪台已经超期、这周排不排得过来 —— 三个问题用一份清单答完。

按「日历周期」和「运行小时周期」两条线各算一个到期日,取先到的那条;给出剩余天数、超期天数、 按等级折算的优先级,再把未来八周要花的工时摊开看哪一周会挤爆。

纯本地计算,不联网、不上传、不需要任何权限。仅支持 Android。

购买前必读

  • 本插件只算排期,不做设备台账、不做保养记录归档、不做备件库存。设备清单与读数由你的业务系统传进来, 插件算完就返回,不落库。
  • 两条周期可以只设一条:只按日历就走日历,只按运行小时就走小时;两条都设则取先到的一个。 小时周期要换算成日期,必须提供日均运行小时,否则这一条不参与计算并在体检里提示。
  • 日均运行小时是估算值(比如两班 16 小时、三班 22 小时),它只影响「还有几天到期」的换算精度, 不影响「还差多少小时」这个硬指标。
  • 单次工时(分钟)用于周负荷。填 0 时该设备不计入工时,只计台数,体检会提示补填。
  • 插件不判断「这个周期定得对不对」。周期是你工艺与设备手册给的,插件只负责按它排。

解决什么问题

设备保养最常见的失败不是「忘了做」,而是三件事:

  1. 两套周期打架:设备手册写「每 500 小时或每季度」,实际执行时只看了日历,跑得满的机台早就该保养了;
  2. 超期没人认领:月底一看清单,七八台都超了,先做哪台全凭谁嗓门大;
  3. 计划撞车:这个月排了 20 台,实际只有一个维修工,排了也做不完,最后变成集体补记录。

插件的做法:

  • 两条触发各算一个日期,取先到,并把「按日历先到 / 按运行小时先到」写清楚,方便复盘时确认是哪种机制触发的;
  • 优先级 = 等级权重 × 2 − 剩余天数。A 级折算 2 天优先,超期永远排最前, 但不会把「明天到期」的 B 级压到「十五天后到期」的 A 级下面 —— 这是车间真实节奏,不是理论排序;
  • 八周工时按周汇总,超过每周可用工时的那一周标红并给出超出小时数,让「排不下」在排之前就暴露。

与同类的边界

场景 本插件 常见替代
日历 + 运行小时双触发 是,取先到并注明触发方式 Excel 表通常只做日历
超期与优先级排序 是,等级折算天数 靠人工看颜色
八周工时负荷与超载周 是 纸质排班表
台账数据体检 是(日期、读数、缺字段) 无
设备台账 / 保养记录归档 否 需要时用 CMMS 或自建表
备件库存与采购 否 —
OEE 与停机损失归因 否,见 szhzy-oee-loss —

如果要做「这台机今天损失在哪」,用 szhzy-oee-loss;本插件管的是「它什么时候该停下来保养」。 两者数据可以互相参考,但算法与用途不重叠。

快速上手

1. 准备设备清单

const devices = [
  {
    code: 'ZS-01',        // 设备编号
    name: '注塑机 180T',   // 名称
    grade: 'A',           // A / B / C,缺省按 B
    lastDate: '2026-10-02', // 上次保养日期
    lastHours: 8420,      // 上次保养时的累计运行小时
    cycleDays: 30,        // 日历周期(天),0 表示不按日历
    cycleHours: 500,      // 运行小时周期(小时),0 表示不按小时
    currentHours: 8850,   // 当前累计运行小时
    dailyHours: 18,       // 日均运行小时
    estMinutes: 180       // 单次保养工时(分钟)
  }
]

2. 算一次

import { pmPlan } from '@/uni_modules/szhzy-pm-plan'

const out = pmPlan({
  devices,
  baseDate: '2026-11-06', // 不传则取设备当天日期
  leadDays: 7,            // 提前提醒窗口,默认 7 天
  capacityMinutes: 480    // 每周可用保养工时,默认 2400(40 小时)
})

if (out.ok) {
  console.log(out.overdueCount)   // 已超期台数
  console.log(out.hint)           // 一句话结论
  console.log(out.devices[0])     // 排在最前的那台,含 nextDate / remainDays / trigger / action
  console.log(out.weeks)          // 八周负荷,含 count / hours / over
  console.log(out.issues)         // 台账体检结果
}

3. 从文本台账导入

import { pmParseText } from '@/uni_modules/szhzy-pm-plan'

const parsed = pmParseText(`
编号,名称,上次日期,上次小时,日周期,时周期,当前小时,日均小时,单次工时,等级
ZS-01,注塑机 180T,2026-10-02,8420,30,500,8850,18,180,A
KY-01,螺杆空压机,2026-09-18,12400,0,2000,14380,20,120,A
`)

分隔符认逗号、制表符、分号、竖线;表头行与 # 开头的注释行会自动跳过; 一条设备至少要有编号、名称、上次保养日期三个字段,后面对应的周期与读数缺省按 0 处理。

4. 导出

import { pmExport } from '@/uni_modules/szhzy-pm-plan'

const out = pmExport({ devices, baseDate: '2026-11-06', fileName: '设备保养计划' })
// out.detailPath → 设备保养计划-明细.csv(16 列)
// out.weekPath   → 设备保养计划-周负荷.csv(8 周)

默认写到应用外部私有目录,不需要存储权限;CSV 带 UTF-8 BOM,Excel 双击不乱码。

返回字段

字段 含义
overdueCount / urgentCount / watchCount / normalCount / noPlanCount 五档台数,之和等于设备总数
weekCount / weekMinutes 第一周(今天起 7 天)的台数与工时
overloadWeeks 八周里超出可用工时的周数
devices[].nextDate 下次保养日(两条触发里先到的那个)
devices[].trigger 按日历 / 按运行小时 / 按日历先到 / 按运行小时先到
devices[].remainDays 距下次保养的天数,负数即超期
devices[].status overdue / urgent / watch / normal / noplan
devices[].action 一句话动作建议,可直接显示在待办里
issues[].level error 必须修(影响计算)/ warn 建议修(影响精度)

错误码

code 场景
BAD_BASE_DATE 基准日期不是合法的 YYYY-MM-DD
NO_DEVICE 设备清单为空
NO_OUTPUT_DIR 拿不到可写目录(导出时)

单台设备的数据问题不会让整批失败:坏日期、读数录反、缺日均小时都会被记进 issues 并跳过该设备的排期, 其余设备照常算完。这一点是刻意的 —— 车间台账永远有几行是错的,不能因为一行错就整张表用不了。

验证状态

  • UTS → Kotlin 编译通过:Project demo-pm-plan compiled successfully,产物 index.kt 1219 行、 classes.dex 53304 字节;
  • 纯逻辑回归测试 139 项全部通过:日期往返(1600 组)、双触发取先到、五档状态边界、 周负荷分桶与超载、八类数据体检、文本解析与 CSV 结构;
  • 真机未验证:本轮测试机(HUAWEI CET-AL60 / Android 12)处于锁屏状态(deviceLocked=1), 无法安装并操作界面,因此页面交互与真机文件读写均未实测;
  • 市场截图为 H5 构建产物在浏览器中的真实渲染,页面标注「示例数据」;
  • iOS / 鸿蒙 / 小程序 / Web 均未实现,平台声明一律为不支持。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无系统权限。读取调用方用系统文件选择器交过来的文件(路径或 content:// 授权),写出走应用外部私有目录。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集、不上传任何数据,不访问网络,不写日志。设备清单只在内存中计算;导出的 CSV 由调用方决定是否落盘,默认写应用外部私有目录。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

暂无用户评论。