service-scheduleはスケジュールに従って自動実行されるすべてのジョブ(cronジョブ)を管理します。バッチ処理・リマインダー送信・データ同期など、ユーザーが手動でトリガーしなくても自動的に処理されます。
| ジョブ | 実行頻度 | 説明 |
|---|
| 支払リマインダー送信 | 毎日 | 期日N日前にサプライヤーへメール通知(payment_confirm_day_advance設定値) |
| 月次支払締め | 月1回 | 月次支払データを集計してレポートを生成 |
| 定期支払実行 | スケジュール通り | 期日到来した支払を実行(is_regular_fixed_paymentがONの場合) |
| ジョブ | 実行頻度 | 説明 |
|---|
| 契約期限アラート | 毎日 | 残30日・7日の契約について担当者へ通知 |
| 定期的な反社確認 | 週次/月次 | 取引中のサプライヤーを反社DBで再確認 |
| 期限切れアカウントの無効化 | 毎日 | end_dateを過ぎたユーザーを自動的にロック |
| ジョブ | 実行頻度 | 説明 |
|---|
| Subscription注文の自動生成 | 設定スケジュール通り | 定期購入商品の注文を自動作成 |
| カタログ価格の同期 | トリガー時 | MallSupplierが価格変更したときに反映 |
| ジョブ | 実行頻度 | 説明 |
|---|
| OpenSearch同期 | リアルタイム/定期 | PostgreSQLからOpenSearchへデータ同期 |
| 一時ファイルのクリーンアップ | 週次 | S3上の参照されていない一時ファイルを削除 |
| マスタデータ期限アラート | 毎日 | 組織・サプライヤー・契約等のend_dateが近い場合に通知 |
flowchart TD
CRON["Cronトリガー\n(service-schedule)"] --> JOB
subgraph JOB["実行対象ジョブの特定"]
LOOKUP["現在時刻に該当する\nジョブリストを照会"]
end
JOB --> EXEC["ジョブを実行\n対象サービスのAPIを呼び出し"]
EXEC --> MAIL["service-mail\nリマインダーメール送信"]
EXEC --> NOTIF["service-notification\nアプリ内通知送信"]
EXEC --> BUYER_ORDER["service-buyer-order\n自動発注作成"]
EXEC --> LOG["実行結果を記録\n監査ログへ"]
ProviderおよびBuyer Adminはスケジュールの状況をScheduleモジュールで確認・管理できます。
Providerポータル → Schedule → ジョブ一覧
| 操作 | 説明 |
|---|
| ジョブ一覧の表示 | 設定済みの全ジョブを確認 |
| 実行履歴の確認 | 過去の実行結果(成功/失敗)を確認 |
| 手動実行 | スケジュールを待たずに即時実行 |
| 一時停止 | ジョブを一時的に無効化 |
Buyerは自社に関連するスケジュールを確認できます。
- 支払締め日のスケジュール
- 支払リマインダーのスケジュール
- Subscriptionの自動発注スケジュール
実行スケジュールはcron式(Unix cron準拠)で設定されます。
| cron式の例 | 意味 |
|---|
0 9 * * 1-5 | 平日(月〜金)9:00 |
0 0 1 * * | 毎月1日 00:00 |
0 8 * * * | 毎日 8:00 |
*/30 * * * * | 30分ごと |
flowchart TD
JOB_RUN["ジョブ実行"] --> SUCCESS{"成功?"}
SUCCESS -->|"はい"| LOG_OK["成功ログを記録\nlast_run_timeを更新"]
SUCCESS -->|"いいえ"| RETRY{"リトライ\n(最大3回)"}
RETRY -->|"残りあり"| WAIT["N分後に再試行"]
WAIT --> JOB_RUN
RETRY -->|"上限到達"| ALERT["Provider Adminへアラート送信\nエラーログを記録"]
本番環境ではservice-scheduleはKubernetes CronJobとして動作します。
| 環境 | 設定 |
|---|
production | Kubernetes CronJob(東京リージョン) |
production-osaka | Kubernetes CronJob(大阪リージョン、DR) |
localhost | Spring Scheduler(サービス内部) |
- 冪等性(Idempotent): 各ジョブは冪等に設計 — 再実行しても重複データは生成されません。
- ジョブの分離: 会社グループごとに独立して処理 — あるグループのエラーが他のグループに影響しません。
- タイムゾーン: すべてのスケジュールは**JST(日本標準時、UTC+9)**で動作します。
- 実行結果の記録: 成功・失敗にかかわらず、実行のたびにタイムスタンプとエラー詳細が記録されます。
- Subscription注文のスキップ: Subscriptionジョブ実行時に対象商品が一時停止中の場合、その商品はスキップされ警告が記録されます。
| 画面 | Portal | URL (Staging) |
|---|
| スケジュール管理 | Provider | /eProcurement/Schedule |
| 実行履歴 | Provider | /eProcurement/Schedule/History |
| Buyer向けスケジュール | Buyer | /eProcurement/Schedule |