# SHJ-8 共通バッチ処理ログシステム

## 概要
SHJ-8は**全てのSHJ系バッチ処理**の実行ログを**batch_logテーブル**に登録する**共通機能**です。
仕様書に基づき、batch_logテーブルの各フィールドを活用してSHJ-8の要件を満たします：

### フィールドマッピング
- **デバイスID** → `parameters`（JSON形式）
- **プロセス名** → `process_name`
- **ジョブ名** → `message`の一部
- **ステータス** → `status`
- **ステータスコメント** → `message`、`error_details`
- **登録日時** → `start_time`、`created_at`
- **更新日時** → `end_time`、`updated_at`

## 処理フロー

### 【処理1】入力パラメーターをチェックする
- デバイスID: device表での存在確認
- プロセス名/ジョブ名: いずれか必須の確認
- ステータス: 必須チェック
- 登録日時/更新日時: yyyy/mm/dd形式の検証

### 【処理2】バッチ処理ログを登録する
- batch_logテーブルへのINSERT処理
- job_log_idはAUTO_INCREMENTで自動生成
- status_commentは処理成功時に「処理成功」を設定
- 仕様書指定の日付でcreated_at/updated_atを設定

### 【処理3】処理結果を返却する
- 処理結果: 0=正常終了、1=異常終了
- 異常情報の詳細メッセージ

## 使用方法

### コマンド実行
```bash
php artisan shj:batch-log {デバイスID} {プロセス名} {ジョブ名} {ステータス} {登録日時} {更新日時}
```

### 実行例
```bash
# SHJ-4C室割当処理のログ記録
php artisan shj:batch-log 9999 "SHJ-4C" "室割当処理" "success" "2025/01/15" "2025/01/15"

# SHJメール送信処理のログ記録
php artisan shj:batch-log 9999 "SHJ-MAIL-SEND" "メール送信" "running" "2025/01/15" "2025/01/15"

# その他のSHJ系バッチのログ記録
php artisan shj:batch-log 9999 "SHJ-5" "駐車場空き確認" "completed" "2025/01/15" "2025/01/15"
```

## テストデータ
`database/seeders/ShjBatchLogTestSeeder.php`にテスト用のデバイスデータが含まれています。

### テストデータ挿入
```bash
php artisan db:seed --class=ShjBatchLogTestSeeder
```

### テストデバイス
- device_id: 9999 (テスト用プリンター)

## データベーステーブル

### batch_log（統一テーブル）
```sql
CREATE TABLE `batch_log` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `process_name` varchar(50) NOT NULL COMMENT 'プロセス名',
  `status` varchar(20) NOT NULL COMMENT 'ステータス',
  `start_time` datetime NOT NULL COMMENT '開始時刻',
  `end_time` datetime DEFAULT NULL COMMENT '終了時刻',
  `parameters` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'パラメータ（JSON形式）',
  `message` text DEFAULT NULL COMMENT 'メッセージ',
  `error_details` text DEFAULT NULL COMMENT 'エラー詳細',
  `execution_count` int(11) NOT NULL DEFAULT 0 COMMENT '実行回数',
  `success_count` int(11) NOT NULL DEFAULT 0 COMMENT '成功回数',
  `error_count` int(11) NOT NULL DEFAULT 0 COMMENT 'エラー回数',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
)
```

### device
```sql
CREATE TABLE `device` (
  `device_id` int(10) UNSIGNED NOT NULL,
  `park_id` int(10) UNSIGNED DEFAULT NULL,
  `device_type` varchar(255) DEFAULT NULL,
  `device_subject` varchar(255) DEFAULT NULL,
  -- その他のフィールド...
)
```

## ファイル構成

### モデル
- `app/Models/Device.php` - deviceテーブルのEloquentモデル
- `app/Models/Batch/BatchLog.php` - **batch_logテーブル対応モデル**
  - SHJ-8仕様に基づく共通バッチログ機能
  - `createShjJobLog()` メソッドでbatch_logに統一記録
  - 全SHJ系バッチで共通利用

### コマンド
- `app/Console/Commands/ShjBatchLogCommand.php` - Artisanコマンド

### サービス
- `app/Services/ShjBatchLogService.php` - 核となるビジネスロジック

### 設定
- `app/Providers/AppServiceProvider.php` - サービスの依存関係注入設定

## ログ
処理の詳細なログは`storage/logs/laravel.log`に出力されます。

## エラーハンドリング
- デバイスID存在チェックエラー
- パラメータ形式エラー
- 日付形式エラー
- データベース挿入エラー
- 全てのエラーはbatch_logテーブルに記録

## 入出力仕様

### 入力パラメーター
| No | パラメーター | 桁数 | 型 | 多重度 | 備考 |
|----|-------------|------|-----|--------|------|
| 1 | デバイスID | 10 | 数字列 | 1 | |
| 2 | プロセス名 | 20 | 文字列 | 1 | |
| 3 | ジョブ名 | 20 | 文字列 | 1 | |
| 4 | ステータス | 10 | 文字列 | 1 | |
| 5 | 登録日時 | 10 | 日付(yyyy/mm/dd) | 1 | |
| 6 | 更新日時 | 10 | 日付(yyyy/mm/dd) | 1 | |

### 出力パラメーター
| No | パラメーター | 桁数 | 型 | 多重度 | 備考 |
|----|-------------|------|-----|--------|------|
| 1 | 処理結果 | 1 | 数値 | 1 | 0:正常終了/1:異常終了 |
| 2 | 異常情報 | ## | 文字列 | 1 | |

## 出力結果（仕様書準拠）

### 正常終了時
```json
{
  "処理結果": 0,
  "異常情報": "",
  "batch_log_id": 1
}
```

### エラー時
```json
{
  "処理結果": 1,
  "異常情報": "エラー: デバイスID 9999 が見つかりません",
  "batch_log_id": 1
}
```

### 処理結果の値
- **0**: 正常終了
- **1**: 異常終了

### 異常情報
- 正常時: 空文字
- エラー時: エラーの詳細内容

## 注意事項
1. デバイスIDは事前にdeviceテーブルに存在している必要があります
2. プロセス名とジョブ名はいずれか必須ですが、どちらも設定可能です
3. 日付形式はyyyy/mm/dd形式で入力してください
4. batch_logテーブルを使用してSHJ-8の機能を実現しています
5. すべてのSHJ系バッチで共通利用できる統一ログシステムです