リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: EnergyLog
アラート閾値超過設備のダッシュボード警告バナー表示
## 1. 目的
設備マスタに登録された `alert_threshold`(最大電力アラート閾値)を活用し、当月の使用量がその閾値を超えた設備をダッシュボード上に警告バナーとして目立つ形で表示する。現状、閾値はマスタに入力できるが表示・通知に活用されておらず、管理者が異常消費を見逃しやすい。この改善により登録済みデータを即座に活用でき、省エネ・コスト管理の実効性が高まる。
## 2. 具体的な仕様
### 2-1. バックエンド (pages/dashboard.php)
- 既存の `$year`, `$month`, `session_key()` を用いて以下のクエリを追加する。
```sql
SELECT
f.id,
f.name,
f.process,
f.energy_type,
f.unit,
f.alert_threshold,
r.usage_amount
FROM facilities f
JOIN energy_records r
ON r.facility_id = f.id
AND r.session_key = f.session_key
AND r.record_year = :year
AND r.record_month = :month
WHERE f.session_key = :sk
AND f.alert_threshold IS NOT NULL
AND f.alert_threshold > 0
AND r.usage_amount > f.alert_threshold
ORDER BY (r.usage_amount - f.alert_threshold) DESC
```
- 結果を `$alertFacilities` 配列として `render_layout` クロージャに渡す。
### 2-2. フロントエンド (dashboard.php の HTML 部分)
- `$alertFacilities` が 1 件以上ある場合のみ、`.grid-4` メトリクスカードの**直前**に警告バナーを挿入する。
```html
<?php if (!empty($alertFacilities)): ?>
<div class="alert-banner">
<span class="alert-icon">⚠️</span>
<strong>閾値超過設備が <?= count($alertFacilities) ?> 件あります</strong>
<ul class="alert-list">
<?php foreach ($alertFacilities as $af): ?>
<li>
<?= h($af['name']) ?>
(<?= h(energy_label($af['energy_type'])) ?>):
<?= h(num($af['usage_amount'], 1)) ?> <?= h($af['unit']) ?>
/閾値 <?= h(num($af['alert_threshold'], 1)) ?> <?= h($af['unit']) ?>
<span class="over-rate">
+<?= h(num((($af['usage_amount'] - $af['alert_threshold']) / $af['alert_threshold']) * 100, 1)) ?>%
</span>
</li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
```
### 2-3. CSS (style.css または既存のインライン `<style>` に追加)
```css
.alert-banner {
background: #fff3cd;
border-left: 4px solid #f59e0b;
border-radius: 6px;
padding: 12px 16px;
margin-bottom: 16px;
font-size: 0.95rem;
color: #92400e;
}
.alert-banner .alert-icon { margin-right: 6px; }
.alert-list {
margin: 8px 0 0 1.2em;
padding: 0;
list-style: disc;
}
.alert-list li { margin: 4px 0; }
.over-rate {
font-weight: bold;
color: #dc2626;
margin-left: 4px;
}
/* 印刷時にも表示 */
@media print { .alert-banner { border-color: #000; background: #fffbe6; } }
```
## 3. 既存機能との整合
- `alert_threshold` カラムはすでに `facilities` テーブルに存在し、設備登録フォームから入力済み。スキーマ変更不要。
- ダッシュボードの既存の KPI カード・グラフ・集計テーブルには一切手を加えない。バナーを先頭に追加するだけ。
- `$alertFacilities` が空の場合はバナー自体が非表示となり、閾値未設定の既存ユーザーへの影響はゼロ。
- スマホ対応: `alert-banner` は `width: 100%` のブロック要素なので、既存のレスポンシブレイアウトを壊さない。
- 印刷(月次レポート)時にも閾値超過情報が残るよう `no-print` クラスは付与しない。
設備マスタに登録された `alert_threshold`(最大電力アラート閾値)を活用し、当月の使用量がその閾値を超えた設備をダッシュボード上に警告バナーとして目立つ形で表示する。現状、閾値はマスタに入力できるが表示・通知に活用されておらず、管理者が異常消費を見逃しやすい。この改善により登録済みデータを即座に活用でき、省エネ・コスト管理の実効性が高まる。
## 2. 具体的な仕様
### 2-1. バックエンド (pages/dashboard.php)
- 既存の `$year`, `$month`, `session_key()` を用いて以下のクエリを追加する。
```sql
SELECT
f.id,
f.name,
f.process,
f.energy_type,
f.unit,
f.alert_threshold,
r.usage_amount
FROM facilities f
JOIN energy_records r
ON r.facility_id = f.id
AND r.session_key = f.session_key
AND r.record_year = :year
AND r.record_month = :month
WHERE f.session_key = :sk
AND f.alert_threshold IS NOT NULL
AND f.alert_threshold > 0
AND r.usage_amount > f.alert_threshold
ORDER BY (r.usage_amount - f.alert_threshold) DESC
```
- 結果を `$alertFacilities` 配列として `render_layout` クロージャに渡す。
### 2-2. フロントエンド (dashboard.php の HTML 部分)
- `$alertFacilities` が 1 件以上ある場合のみ、`.grid-4` メトリクスカードの**直前**に警告バナーを挿入する。
```html
<?php if (!empty($alertFacilities)): ?>
<div class="alert-banner">
<span class="alert-icon">⚠️</span>
<strong>閾値超過設備が <?= count($alertFacilities) ?> 件あります</strong>
<ul class="alert-list">
<?php foreach ($alertFacilities as $af): ?>
<li>
<?= h($af['name']) ?>
(<?= h(energy_label($af['energy_type'])) ?>):
<?= h(num($af['usage_amount'], 1)) ?> <?= h($af['unit']) ?>
/閾値 <?= h(num($af['alert_threshold'], 1)) ?> <?= h($af['unit']) ?>
<span class="over-rate">
+<?= h(num((($af['usage_amount'] - $af['alert_threshold']) / $af['alert_threshold']) * 100, 1)) ?>%
</span>
</li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
```
### 2-3. CSS (style.css または既存のインライン `<style>` に追加)
```css
.alert-banner {
background: #fff3cd;
border-left: 4px solid #f59e0b;
border-radius: 6px;
padding: 12px 16px;
margin-bottom: 16px;
font-size: 0.95rem;
color: #92400e;
}
.alert-banner .alert-icon { margin-right: 6px; }
.alert-list {
margin: 8px 0 0 1.2em;
padding: 0;
list-style: disc;
}
.alert-list li { margin: 4px 0; }
.over-rate {
font-weight: bold;
color: #dc2626;
margin-left: 4px;
}
/* 印刷時にも表示 */
@media print { .alert-banner { border-color: #000; background: #fffbe6; } }
```
## 3. 既存機能との整合
- `alert_threshold` カラムはすでに `facilities` テーブルに存在し、設備登録フォームから入力済み。スキーマ変更不要。
- ダッシュボードの既存の KPI カード・グラフ・集計テーブルには一切手を加えない。バナーを先頭に追加するだけ。
- `$alertFacilities` が空の場合はバナー自体が非表示となり、閾値未設定の既存ユーザーへの影響はゼロ。
- スマホ対応: `alert-banner` は `width: 100%` のブロック要素なので、既存のレスポンシブレイアウトを壊さない。
- 印刷(月次レポート)時にも閾値超過情報が残るよう `no-print` クラスは付与しない。
💬 返信 (3)
🛠 開発を開始しました (機能追加: energy-log)
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「EnergyLog」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=energy-log
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/energy-log/
ご利用ありがとうございます!
ご要望いただいた「EnergyLog」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=energy-log
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/energy-log/
ご利用ありがとうございます!
Echo
Iris