feat: サブシステムB 残業統計管理 初回production反映
- 全6プログラム(ZAN01CHK~ZAN06UPD)ソース・実行ファイル - 5サブプログラム(SUB01DAT~SUB05TIM)ソース・DLL - 10 COPY書式ファイル - 詳細設計書12ファイル - サブシステムB全体設計書 - bin/配下の実行ファイル资産
This commit is contained in:
@@ -0,0 +1,235 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | ZAN06UPD |
|
||||
| 3 | プログラム名 | 残業統計DB更新処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | DB更新 |
|
||||
| 6 | 機能概要 | OVT-SUMMARYの各レコードをOVT-APPLICATIONSテーブルにINSERT/UPSERTし、 |
|
||||
| 7 | | OVT-MONTHLYテーブルに月次集計を反映する。 |
|
||||
| 8 | | またOVT-DBCLEANの各レコードについて、該当申請を取消状態に更新し、 |
|
||||
| 9 | | OVT-MONTHLYから該当加班時間を減算する。 |
|
||||
| 10 | | 新規カバレッジ:EXEC SQL(INSERT/UPDATE/SELECT)、COMMIT/ROLLBACK、 |
|
||||
| 11 | | PERFORM VARYING/TEST AFTER、COBOL SUBTRACT/MULTIPLY |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | ファイルR01(OVT-SUMMARY) | ZAN05CALの出力、APPL-ID順ソート済 |
|
||||
| 2 | ファイルR02(OVT-DBCLEAN) | ZAN04MATの出力、DB上に該当APPL-IDが存在すること(孤立取消はエラー) |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | OVT-SUMMARY | R01 | ZAN06R01 | I | ZAN03REC | FB | | 80 | PS | 集約結果(加班時間付加) |
|
||||
| 2 | OVT-DBCLEAN | R02 | ZAN06R02 | I | ZAN04REC | FB | | 80 | PS | 孤立取消(DB削除対象) |
|
||||
| 3 | ERROR-LOG | W01 | ZAN06W01 | O | ZAN05REC | VB | | 200 | PS | DBエラー・データ不整合記録 |
|
||||
| 4 | OVERTIME-DB | DB | - | - | - | DB2 | - | - | DASD | EXEC SQLで直接操作 |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | キー項目 | 用途 |
|
||||
|----|-----------|---------|------|
|
||||
| 1 | ファイルR01 | APPL-ID | OVT-APPLICATIONS INSERT/UPDATEのキー |
|
||||
| 2 | ファイルR02 | APPL-ID | OVT-APPLICATIONS SELECT/UPDATEのキー |
|
||||
| 3 | DB OVT-MONTHLY | EMP-ID + YEAR-MONTH + OVT-TYPE | 月次集計UPSERTのキー |
|
||||
|
||||
### テーブル定義
|
||||
|
||||
#### OVT-APPLICATIONS(個別加班申請テーブル)
|
||||
|
||||
| カラム | 型 | 内容 |
|
||||
|--------|-----|------|
|
||||
| APPL-ID | CHAR(8) | 申請番号(PK) |
|
||||
| EMP-ID | CHAR(8) | 社員番号 |
|
||||
| APPL-DATE | CHAR(8) | 申請日 YYYYMMDD |
|
||||
| OVT-TYPE | CHAR(1) | W=平日 / H=休日 |
|
||||
| START-TIME | CHAR(4) | 開始時刻 HHMM |
|
||||
| END-TIME | CHAR(4) | 終了時刻 HHMM |
|
||||
| OVT-HOURS | DECIMAL(4,1) | 加班時間 |
|
||||
| STATUS | CHAR(1) | 0=有効 / 9=取消 |
|
||||
| UPDATED-AT | TIMESTAMP | 更新日時 |
|
||||
|
||||
#### OVT-MONTHLY(月次集計テーブル)
|
||||
|
||||
| カラム | 型 | 内容 |
|
||||
|--------|-----|------|
|
||||
| EMP-ID | CHAR(8) | 社員番号(PK) |
|
||||
| YEAR-MONTH | CHAR(6) | 対象年月 YYYYMM(PK) |
|
||||
| OVT-TYPE | CHAR(1) | W=平日 / H=休日(PK) |
|
||||
| OVT-HOURS | DECIMAL(6,1) | 加班時間合計 |
|
||||
| OVT-COUNT | INTEGER | 加班回数 |
|
||||
| UPDATED-AT | TIMESTAMP | 更新日時 |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||||
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'SUB01DAT'
|
||||
PARM2:復帰コード
|
||||
【ABEND処理SUB】
|
||||
ABENDコード:999
|
||||
1-5.使用ファイルのオープン(R01/R02入力、W01出力)
|
||||
1-6.R01、R02の初回読込(1100R01INNSOR、1200R02INNSOR)
|
||||
|
||||
2.主処理(2000MAJSOR)
|
||||
2-1.処理フェーズ1:OVT-SUMMARY(R01)を全件処理
|
||||
R01 EOFまで以下の処理を繰り返す
|
||||
2-1-1.OVT-APPLICATIONSへのINSERTを試行
|
||||
【EXEC SQL INSERT】
|
||||
INSERT INTO OVT-APPLICATIONS (APPL-ID, EMP-ID, APPL-DATE, OVT-TYPE,
|
||||
START-TIME, END-TIME, OVT-HOURS, STATUS, UPDATED-AT)
|
||||
VALUES (:WRK-SQL-APPL-ID, :WRK-SQL-EMP-ID, :WRK-SQL-APPL-DATE,
|
||||
:WRK-SQL-OVT-TYPE, :WRK-SQL-START-TIME, :WRK-SQL-END-TIME,
|
||||
:WRK-SQL-OVT-HOURS, :WRK-SQL-STATUS, CURRENT TIMESTAMP)
|
||||
2-1-2.SQLCODE NOT = 0の場合(APPL-ID重複):
|
||||
【EXEC SQL UPDATE】
|
||||
UPDATE OVT-APPLICATIONS SET STATUS = :WRK-SQL-STATUS,
|
||||
UPDATED-AT = CURRENT TIMESTAMP
|
||||
WHERE APPL-ID = :WRK-SQL-APPL-ID
|
||||
SQLCODE異常時は9100DBERRSORへ
|
||||
2-1-3.SQLCODE = 0の場合:CUN-DBXINS加算、それ以外:CUN-DBXUPD加算
|
||||
2-1-4.OVT-MONTHLYのUPSERT(2110MONTHLYUPSOR)
|
||||
2-1-5.CUN-COMMITが閾値以上の場合、COMMIT実行(2300COMMITDBX)
|
||||
|
||||
2-2.処理フェーズ2:OVT-DBCLEAN(R02)を全件処理
|
||||
R02 EOFまで以下の処理を繰り返す
|
||||
2-2-1.SELECTでOVT-APPLICATIONSから該当レコード取得
|
||||
【EXEC SQL SELECT INTO】
|
||||
SELECT EMP-ID, APPL-DATE, OVT-TYPE, OVT-HOURS
|
||||
INTO :WRK-SQL-EMP-ID, :WRK-SQL-APPL-DATE, :WRK-SQL-OVT-TYPE,
|
||||
:WRK-SQL-OVT-HOURS
|
||||
FROM OVT-APPLICATIONS
|
||||
WHERE APPL-ID = :WRK-SQL-APPL-ID
|
||||
2-2-2.SQLCODE NOT = 0(該当なし=孤立取消):
|
||||
ERROR-LOGに出力(カテゴリ=20)、9999ABDSORで異常終了
|
||||
2-2-3.OVT-APPLICATIONSのSTATUSを'9'に更新
|
||||
【EXEC SQL UPDATE】
|
||||
UPDATE OVT-APPLICATIONS SET STATUS = '9',
|
||||
UPDATED-AT = CURRENT TIMESTAMP
|
||||
WHERE APPL-ID = :WRK-SQL-APPL-ID
|
||||
2-2-4.YEAR-MONTH抽出:APPL-DATE(1:6)
|
||||
2-2-5.OVT-MONTHLYから減算(2210MONTHLYSUBSOR)
|
||||
【EXEC SQL UPDATE(減算)+COBOL SUBTRACT検証】
|
||||
UPDATE OVT-MONTHLY SET
|
||||
OVT-HOURS = OVT-HOURS - :WRK-SQL-OVT-HOURS,
|
||||
OVT-COUNT = OVT-COUNT - 1,
|
||||
UPDATED-AT = CURRENT TIMESTAMP
|
||||
WHERE EMP-ID = :WRK-SQL-EMP-ID
|
||||
AND YEAR-MONTH = :WRK-SQL-YEAR-MONTH
|
||||
AND OVT-TYPE = :WRK-SQL-OVT-TYPE
|
||||
SQLCODE異常時は9100DBERRSORへ
|
||||
2-2-6.CUN-COMMITが閾値以上の場合、COMMIT実行(2300COMMITDBX)
|
||||
|
||||
3.OVT-MONTHLY UPSERT処理(2110MONTHLYUPSOR)
|
||||
3-1.OVT-MONTHLYの存在確認SELECT
|
||||
【EXEC SQL SELECT INTO(DB-OVT-HOURS, DB-OVT-COUNT)】
|
||||
SELECT OVT-HOURS, OVT-COUNT
|
||||
INTO :DB-OVT-HOURS, :DB-OVT-COUNT
|
||||
FROM OVT-MONTHLY
|
||||
WHERE EMP-ID = :WRK-SQL-EMP-ID
|
||||
AND YEAR-MONTH = :WRK-SQL-YEAR-MONTH
|
||||
AND OVT-TYPE = :WRK-SQL-OVT-TYPE
|
||||
3-2.SQLCODE = 0(既存レコードあり):
|
||||
【EXEC SQL UPDATE(加算)】
|
||||
UPDATE OVT-MONTHLY SET
|
||||
OVT-HOURS = OVT-HOURS + :WRK-SQL-OVT-HOURS,
|
||||
OVT-COUNT = OVT-COUNT + 1,
|
||||
UPDATED-AT = CURRENT TIMESTAMP
|
||||
WHERE EMP-ID = :WRK-SQL-EMP-ID
|
||||
AND YEAR-MONTH = :WRK-SQL-YEAR-MONTH
|
||||
AND OVT-TYPE = :WRK-SQL-OVT-TYPE
|
||||
3-3.SQLCODE NOT = 0(新規):
|
||||
【EXEC SQL INSERT】
|
||||
INSERT INTO OVT-MONTHLY
|
||||
(EMP-ID, YEAR-MONTH, OVT-TYPE, OVT-HOURS, OVT-COUNT, UPDATED-AT)
|
||||
VALUES
|
||||
(:WRK-SQL-EMP-ID, :WRK-SQL-YEAR-MONTH, :WRK-SQL-OVT-TYPE,
|
||||
:WRK-SQL-OVT-HOURS, 1, CURRENT TIMESTAMP)
|
||||
3-4.SQLCODE異常時は9100DBERRSORへ
|
||||
|
||||
4.COMMIT処理(2300COMMITDBX)
|
||||
4-1.【EXEC SQL COMMIT】
|
||||
COMMIT WORK
|
||||
4-2.CUN-COMMITをZEROにリセット
|
||||
4-3.CUN-ETHUSに1加算
|
||||
|
||||
5.終了処理(3000STPSOR)
|
||||
5-1.最終COMMIT(2300COMMITDBX)
|
||||
5-2.入出力ファイルのクローズ
|
||||
5-3.DB操作件数メッセージ出力
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:'ZAN06R01' / PARM2:CUN-R01INN
|
||||
PARM1:'ZAN06R02' / PARM2:CUN-R02INN
|
||||
PARM1:'INS' / PARM2:CUN-DBXINS
|
||||
PARM1:'UPD' / PARM2:CUN-DBXUPD
|
||||
PARM1:'W01' / PARM2:CUN-W01OUT
|
||||
5-4.終了メッセージ出力
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
|
||||
6.DBエラー処理(9100DBERRSOR)
|
||||
6-1.ERROR-LOGにDBエラー情報出力(カテゴリ=30)
|
||||
【COBOL STRING】
|
||||
STRING 'DB ERROR SQLCODE=' SQLCODE ' APPL-ID='
|
||||
WRK-SQL-APPL-ID INTO WRK-ERR-DETAIL
|
||||
6-2.【EXEC SQL ROLLBACK】
|
||||
ROLLBACK WORK
|
||||
6-3.9999ABDSORで異常終了
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 新規カバレッジ構文
|
||||
|
||||
| # | 構文 | 用途 |
|
||||
|---|------|------|
|
||||
| 1 | EXEC SQL INSERT | OVT-APPLICATIONSへの新規登録 |
|
||||
| 2 | EXEC SQL UPDATE | OVT-APPLICATIONSステータス更新・OVT-MONTHLY加減算 |
|
||||
| 3 | EXEC SQL SELECT INTO | OVT-MONTHLY存在確認・OVT-APPLICATIONS検索 |
|
||||
| 4 | EXEC SQL COMMIT | 定期的なCOMMIT発行 |
|
||||
| 5 | EXEC SQL ROLLBACK | DBエラー時のROLLBACK |
|
||||
| 6 | PERFORM VARYING | 月(1-12)のバリデーションループ |
|
||||
| 7 | PERFORM TEST AFTER VARYING | 月次減算のリトライ制御 |
|
||||
| 8 | COBOL MULTIPLY | 加班時間→分変換 |
|
||||
| 9 | COBOL SUBTRACT | 残加班容量検証 |
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | WRK-ERR-CATEGORY | 20=孤立取消 / 30=DBエラー |
|
||||
| 2 | ERR-DETAIL | WRK-ERR-DETAIL | エラー詳細メッセージ |
|
||||
Reference in New Issue
Block a user