---
url: /dev/reports/actual-working-time/index.md
---
# 实际工时表

## 功能概述

实际工时表用于展示各车间产品的实际工时消耗数据，包括各工艺阶段的实际工作时长。实际工时数据来源于车间考勤系统和生产报工数据，是评估车间工时利用效率、计算实际费用和绩效工资的重要依据。通过对比标准工时和实际工时，可以分析车间的生产效率差异。

## 业务对象

| 业务对象 | 说明 |
| --- | --- |
| 实际工时统计 | 按车间/产品汇总实际工时数据的核心业务对象 |
| 工时对比分析 | 标准工时与实际工时的对比分析对象 |

**业务场景描述：** 每月末，系统汇总各车间各产品各工艺阶段的实际工时消耗，与对应的标准工时进行对比，计算工时差异率和效率系数，为车间绩效考核和工资分配提供依据。

## 实体设计

**实际工时表实体 (RP\_ActualWorkingTimeLine)**

| 字段名称 | 字段编码 | 数据类型 | 必填 | 是否隐藏 | 说明 |
| --- | --- | --- | --- | --- | --- |
| 主键ID | id | 整数 | 自动 | 系统自带 |
| 会计期间 | period | 文本 | 是 | 否 | 会计月份 |
| 车间ID | workshopId | 参照/外键 | 是 | 是 | 关联车间档案ID |
| 产品编码 | productCode | 文本 | 是 | 否 | 产品料号编码 |
| 产品名称 | productName | 文本 | 是 | 否 | 产品名称 |
| 工艺阶段 | processStage | 文本 | 是 | 否 | 炼胶/压出/成型/硫化/检查 |
| 实际工时 | actualHours | 数值 | 是 | 否 | 实际消耗的工时（小时）(2位小数) |
| 标准工时 | standardHours | 数值 | 是 | 否 | 对应的标准工时（小时）(2位小数) |
| 工时差异 | diffHours | 数值 | 是 | 否 | 实际与标准的工时差(2位小数) |
| 效率系数 | efficiencyRate | 数值 | 是 | 否 | 标准工时/实际工时(2位小数) |
| 产量 | outputQty | 数值 | 是 | 否 | 产品入库数量(2位小数) |
| 实际工时单价 | actualHourlyRate | 数值 | 是 | 否 | 实际工时单价(2位小数) |
| 实际费用 | actualCost | 数值 | 是 | 否 | 按实际工时计算的费用(2位小数) |
| 计算状态 | calcStatus | 枚举 | 是 | 否 | 0-未计算/1-已计算 |
| 备注 | remark | 文本 | 否 | 否 | 备注说明 |
| 创建人 | createBy | 文本 | 自动 | 是 | 创建人 |
| 创建时间 | createTime | 日期时间 | 自动 | 是 | 创建时间 |
| 更新人 | updateBy | 文本 | 自动 | 是 | 更新人 |
| 更新时间 | updateTime | 日期时间 | 自动 | 是 | 更新时间 |
| 组织ID | orgId | 参照/外键 | 是 | 是 | 所属组织ID |

## 页面设计

### 页面布局

实际工时表页面采用双视图切换设计，支持表格视图和对比分析视图。

**顶部筛选区：**

* 会计期间选择器
* 车间多选下拉框
* 工艺阶段筛选
* 视图切换按钮（表格视图 / 对比分析视图）
* "执行计算"按钮

**表格视图：**

* 按车间分组，各工艺阶段分色显示
* 工时差异列正值（效率超额）标绿、负值（效率不足）标红
* 每行显示效率系数进度条
* 汇总行显示各车间实际工时合计

**对比分析视图：**

* 柱状图展示各车间标准工时与实际工时对比
* 折线图展示效率系数趋势
* 支持下钻到产品级别的对比分析

**底部汇总区：**

* 全厂实际工时合计
* 平均效率系数
* 各车间效率排名

### 核心组件

* **报表设计器：** 配置数据列、分组、汇总和条件格式
* **智能分析：** 基于语义模型自动对比标准工时和实际工时，识别效率异常
* **数据可视化：** 集成图表组件，支持柱状图、折线图多维度展示
* **条件格式：** 工时差异自动根据正负值高亮

### 交互规则

1. 默认打开表格视图，展示实际工时明细数据
2. 切换到对比分析视图时自动加载图表数据
3. 点击"执行计算"按钮触发实际工时汇总计算
4. 点击图表数据点可下钻查看产品级明细
5. 效率系数低于阈值的车间自动预警

## 前端脚本

```javascript
// 视图切换事件
async function onViewChange(viewType) {
    if (viewType === 'chart') {
        const data = await loadChartData();
        renderComparisonChart(data);
    } else {
        const data = await loadTableData();
        renderTable(data);
    }
}

// 计算实际工时
async function onClickCalc() {
    const period = getFilterValue('period');
    showLoading('正在汇总实际工时...');
    try {
        const result = await calcActualHours(period);
        renderTable(result.data);
        updateSummary(result.summary);
        showToast('实际工时计算完成');
    } catch (e) {
        showError('计算失败：' + e.message);
    } finally {
        hideLoading();
    }
}

// 渲染对比图表
function renderComparisonChart(data) {
    const chartData = {
        categories: data.workshops,
        series: [
            { name: '标准工时', data: data.stdHours },
            { name: '实际工时', data: data.actualHours }
        ]
    };
    setChartData('comparisonChart', chartData);
}
```

**计算触发时机：**

* 页面加载时自动查询已有计算结果
* 用户手动点击"执行计算"触发计算
* 支持表格视图与图表视图的实时数据同步

## 后端脚本

### YonQL 查询

```sql
-- 查询实际工时数据（来自车间报工系统）
SELECT 
    t.Workshop,
    t.ProductCode,
    t.ProcessStage,
    SUM(t.WorkHours) AS ActualHours
FROM WorkHourReport t
WHERE t.Period = #{period}
GROUP BY t.Workshop, t.ProductCode, t.ProcessStage

-- 查询标准工时数据
SELECT 
    Workshop,
    ProductCode,
    ProcessStage,
    TotalStdHours
FROM StandardWorkingTime
WHERE Period = #{period}
```

### 报表计算逻辑

```javascript
async function calculateActualHours(period) {
    // 1. 获取实际工时数据
    const actualData = await queryActualHours(period);
    
    // 2. 获取标准工时数据（从标准工时表获取）
    const stdData = await queryStandardHours(period);
    
    // 3. 对比计算差异
    for (const actual of actualData) {
        const std = stdData.find(
            s => s.Workshop === actual.Workshop 
             && s.ProductCode === actual.ProductCode
             && s.ProcessStage === actual.ProcessStage
        );
        
        const stdHours = std ? std.TotalStdHours : 0;
        const diffHours = actual.ActualHours - stdHours;
        const efficiency = stdHours > 0 ? stdHours / actual.ActualHours : 1;
        
        await saveActualHours({
            Period: period,
            Workshop: actual.Workshop,
            ProductCode: actual.ProductCode,
            ProcessStage: actual.ProcessStage,
            ActualHours: actual.ActualHours,
            StandardHours: stdHours,
            DiffHours: diffHours,
            EfficiencyRate: efficiency,
            CalcStatus: '已计算'
        });
    }
    
    // 4. 汇总计算
    await summarizeEfficiency(period);
}
```

### 数据汇总

实际工时表按车间汇总实际工时和效率系数，生成各车间效率排名。汇总数据传递给工资表，用于计算绩效工资。效率系数低于预设阈值的车间将触发预警。

## 报表配置

### 报表数据源配置

| 配置项 | 说明 |
| --- | --- |
| 主数据源 | 实际工时表实体 (RP\_ActualWorkingTimeLine) |
| 关联数据源 | 标准工时表、工时报工单、车间档案 |
| 数据类型 | 对比分析类报表 |
| 语义模型 | 基于"标准-实际-效率"三维对比语义模型 |

### 过滤条件

* 会计期间：必选
* 车间：可选，多选
* 工艺阶段：可选
* 效率系数区间：可选，用于筛选异常数据

### 分组统计

* **一级分组：** 车间
* **二级分组：** 工艺阶段
* **三级分组：** 产品
* **汇总指标：** 实际工时合计、工时差异合计、平均效率系数

## 数据权限

### 功能权限

| 角色 | 查看 | 计算 | 导出 | 图表分析 |
| --- | --- | --- | --- | --- |
| 车间主任 | ✅ | ✅ | ✅ | ✅ |
| 财务人员 | ✅ | ❌ | ✅ | ✅ |
| 系统管理员 | ✅ | ✅ | ✅ | ✅ |
| 普通用户 | ✅ | ❌ | ❌ | ❌ |

### 数据权限规则

1. 车间主任仅可查看本车间的实际工时数据和对比分析
2. 财务人员可查看全公司所有车间的对比分析数据
3. 系统管理员拥有全部权限
4. 所有效率分析数据的导出操作需记录日志
