---
url: /dev/reports/maintenance-cost/index.md
---
# 维修费用表

## 功能概述

维修费用表用于归集车间实际发生的维修费用明细，包括设备维修费用、备件采购费用、维修人工费用、外协维修费用等。维修费用表支持按车间、按设备、按费用类型进行明细展示，是车间设备管理和维护成本控制的重要报表工具。

## 业务对象

| 业务对象 | 说明 |
| --- | --- |
| 维修费用归集 | 按车间归集维修费用的核心业务对象 |
| 维修费用明细 | 单笔维修费用的明细对象 |

**业务场景描述：** 每月末，系统从维修工单、备件领用、外协维修合同等数据源汇总各车间的维修费用，按费用类型分类展示，并统计设备维修频率和单台设备维修成本，为设备维护决策提供数据支持。

## 实体设计

**维修费用表实体 (RP\_MaintenanceCostLine)**

| 字段名称 | 字段编码 | 数据类型 | 必填 | 是否隐藏 | 说明 |
| --- | --- | --- | --- | --- | --- |
| 主键ID | id | 整数 | 自动 | 系统自带 |
| 会计期间 | period | 文本 | 是 | 否 | 会计月份 |
| 车间ID | workshopId | 参照/外键 | 是 | 是 | 关联车间档案ID |
| 设备编码 | equipmentCode | 文本 | 是 | 否 | 设备编码 |
| 设备名称 | equipmentName | 文本 | 是 | 否 | 设备名称 |
| 维修单号 | maintenanceNo | 文本 | 是 | 否 | 维修工单编号 |
| 维修类型 | maintenanceType | 文本 | 是 | 否 | 日常保养/故障维修/大修/技改 |
| 备件费用 | sparePartsCost | 数值 | 是 | 否 | 备件采购费用（元）(2位小数) |
| 人工费用 | laborCost | 数值 | 是 | 否 | 维修人工费用（元）(2位小数) |
| 外协费用 | outsourcingCost | 数值 | 是 | 否 | 外协维修费用（元）(2位小数) |
| 其他费用 | otherCost | 数值 | 是 | 否 | 其他维修费用（元）(2位小数) |
| 维修费用合计 | totalCost | 数值 | 是 | 否 | 本次维修费用合计(2位小数) |
| 维修日期 | maintenanceDate | 日期 | 是 | 否 | 维修完成日期 |
| 维修人ID | maintenancePersonId | 参照/外键 | 是 | 是 | 维修负责人ID |
| 设备台数 | equipmentCount | 整数 | 是 | 否 | 涉及设备台数 |
| 单台维修成本 | unitCost | 数值 | 是 | 否 | 单台设备维修成本(2位小数) |
| 计算状态 | calcStatus | 枚举 | 是 | 否 | 0-未计算/1-已计算 |
| 备注 | remark | 文本 | 否 | 否 | 备注说明 |
| 创建人 | createBy | 文本 | 自动 | 是 | 创建人 |
| 创建时间 | createTime | 日期时间 | 自动 | 是 | 创建时间 |
| 更新人 | updateBy | 文本 | 自动 | 是 | 更新人 |
| 更新时间 | updateTime | 日期时间 | 自动 | 是 | 更新时间 |
| 组织ID | orgId | 参照/外键 | 是 | 是 | 所属组织ID |

## 页面设计

### 页面布局

维修费用表页面采用设备维护视角的报表布局，由筛选区、维修明细区和设备统计区构成。

**顶部筛选区：**

* 会计期间选择器
* 车间多选下拉框
* 维修类型筛选
* 设备编码模糊搜索
* "执行归集"按钮
* 设备维修统计按钮

**中间维修明细区：**

* 按车间分组展示维修费用明细
* 同一车间内按维修日期排序
* 维修类型用不同颜色标识（日常保养绿色、故障维修橙色、大修红色、技改蓝色）
* 维修费用合计列高亮显示
* 显示维修单号可追溯

**设备统计区：**

* 各车间维修费用合计
* 设备维修频率排名
* 单台维修成本排名
* 维修类型分布饼图

### 核心组件

* **报表设计器：** 配置多级分组、条件格式和汇总规则
* **智能分析：** 基于语义模型自动识别高维修频率设备，预测维护需求
* **设备维修分析：** 集成设备管理数据，提供设备健康度分析
* **追溯查询：** 支持点击维修单号查看原始维修工单

### 交互规则

1. 页面加载时自动加载当前期间的维修费用数据
2. 点击"执行归集"按钮从各数据源汇总维修费用
3. 点击"设备维修统计"按钮查看设备维度的维修分析
4. 点击维修单号可追溯查看原始维修工单详情
5. 高维修频率设备自动高亮预警

## 前端脚本

```javascript
// 执行维修费用归集
async function onClickCollect() {
    const period = getFilterValue('period');
    showLoading('正在归集维修费用...');
    try {
        const result = await collectMaintenanceCost(period);
        renderTable(result.data);
        renderEquipmentStats(result.stats);
        showToast('维修费用归集完成');
    } catch (e) {
        showError('归集失败：' + e.message);
    } finally {
        hideLoading();
    }
}

// 查看设备维修统计
async function onEquipmentStats() {
    const period = getFilterValue('period');
    const workshop = getFilterValue('workshop');
    const data = await queryEquipmentStats(period, workshop);
    setChartData('frequencyBar', data.frequency);
    setChartData('typePie', data.typeDistribution);
    showStatsPanel();
}

// 追溯维修工单
async function onTraceMaintenance(row) {
    const maintenanceNo = row.getData('MaintenanceNo');
    const doc = await queryMaintenanceOrder(maintenanceNo);
    showDocumentViewer(doc);
}

// 高亮高维修频率设备
function highlightHighFrequency(data) {
    const threshold = getFrequencyThreshold();
    data.forEach(row => {
        if (row.getData('MaintenanceCount') > threshold) {
            row.setBackColor('yellow');
        }
    });
}
```

**计算触发时机：**

* 页面加载时自动加载已有归集数据
* 用户点击"执行归集"手动触发
* 支持设备维度实时分析和预警

## 后端脚本

### YonQL 查询

```sql
-- 查询维修工单费用
SELECT 
    Workshop,
    EquipmentCode,
    MaintenanceNo,
    MaintenanceType,
    SparePartsCost,
    LaborCost,
    MaintenanceDate,
    MaintenancePerson
FROM MaintenanceOrder
WHERE Period = #{period}
AND Status = '已完成'

-- 查询备件领用费用
SELECT 
    Workshop,
    EquipmentCode,
    SUM(Amount) AS SparePartsTotal
FROM SparePartsUse
WHERE Period = #{period}
GROUP BY Workshop, EquipmentCode

-- 查询外协维修费用
SELECT 
    Workshop,
    EquipmentCode,
    Amount AS OutsourcingCost
FROM OutsourcingMaintenance
WHERE Period = #{period}
```

### 报表计算逻辑

```javascript
async function collectMaintenanceCost(period) {
    // 1. 获取维修工单数据
    const orders = await queryMaintenanceOrders(period);
    
    // 2. 获取备件领用数据
    const spareParts = await querySparePartsUsage(period);
    
    // 3. 获取外协维修数据
    const outsourcing = await queryOutsourcingCost(period);
    
    // 4. 汇总计算各维修工单的总费用
    for (const order of orders) {
        const partsCost = getSparePartsCost(spareParts, order.EquipmentCode);
        const outCost = getOutsourcingCost(outsourcing, order.EquipmentCode);
        const totalCost = order.SparePartsCost + order.LaborCost + partsCost + outCost;
        
        await saveMaintenanceCost({
            Period: period,
            Workshop: order.Workshop,
            EquipmentCode: order.EquipmentCode,
            MaintenanceNo: order.MaintenanceNo,
            MaintenanceType: order.MaintenanceType,
            SparePartsCost: order.SparePartsCost,
            LaborCost: order.LaborCost,
            OutsourcingCost: outCost,
            SparePartsCost: partsCost,
            TotalCost: totalCost,
            MaintenanceDate: order.MaintenanceDate,
            CalcStatus: '已计算'
        });
    }
    
    // 5. 统计设备维修频率
    await summarizeEquipmentFrequency(period);
}
```

### 数据汇总

维修费用表按车间和设备汇总维修费用，统计设备维修频率和单台维修成本。汇总数据传递给设备管理模块和车间综合考核模块，用于设备维护计划制定和维修成本控制。

## 报表配置

### 报表数据源配置

| 配置项 | 说明 |
| --- | --- |
| 主数据源 | 维修费用表实体 (RP\_MaintenanceCostLine) |
| 关联数据源 | 维修工单、备件领用单、外协维修合同、设备档案 |
| 数据类型 | 费用归集与分析类报表 |
| 语义模型 | 基于"车间-设备-费用类型"三维维修费用语义模型 |

### 过滤条件

* 会计期间：必选
* 车间：可选，多选
* 维修类型：可选
* 设备编码：可选

### 分组统计

* **一级分组：** 车间
* **二级分组：** 设备
* **汇总指标：** 各项维修费用合计、维修费用合计、单台维修成本

## 数据权限

### 功能权限

| 角色 | 查看 | 归集 | 设备分析 | 导出 |
| --- | --- | --- | --- | --- |
| 车间主任 | ✅ | ✅ | ✅ | ✅ |
| 设备管理员 | ✅ | ✅ | ✅ | ✅ |
| 财务人员 | ✅ | ❌ | ❌ | ✅ |
| 系统管理员 | ✅ | ✅ | ✅ | ✅ |

### 数据权限规则

1. 车间主任可查看本车间维修费用并执行归集
2. 设备管理员可查看全公司设备维修数据
3. 财务人员可查看所有维修费用数据但不可执行归集
4. 系统管理员拥有全部权限
5. 所有归集操作需记录操作日志
