krgm.so-manager-dev.com/SHJ_BATCH_LOG_README.md

175 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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系バッチで共通利用できる統一ログシステムです