#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：請求収納
#
# シェル名      ：督促ステータス一括更新エラーファイルマージ
#
# 機能          ：
#(1)Shell実行判定
#　(1)-1-1.ディレイド処理依頼情報. 処理結果 = 正常の場合(1)-2へ進む。
#　(1)-1-2.上記以外（ディレイド処理依頼情報ファイルなしの場合も含む）の場合、処理終了（戻り値：正常）
#　(1)-2-1.引き継ぎファイルが存在する場合、ファイルから値を取得し、取得後ファイルを削除する。
#　(1)-2-2.引き継ぎファイルが存在しない場合、処理終了（戻り値：メジャーエラー）
#
#(2)Java実行結果判定
#　督促ステータス一括更新エラーファイル および 督促ステータス一括更新処理正常終了フラグファイル の出力判定を分割数だけ順次繰り返す。
#　ファイルの出力が確認できなかった場合((2)-2の場合)は1分待機し再び同ファイルの出力判定を行う。
#　1つの分割ファイルに対し30回試行しても出力が確認できなかった場合は次の分割ファイルの判定に移る。
#
#　(2)-1.督促ステータス一括更新エラーファイル および 督促ステータス一括更新処理正常終了フラグファイル が出力されている場合
#　　(2)-1-1.エラーファイル　＝　0Byteの場合
#　　　ディレイド処理依頼情報．処理結果コード ← "1"（正常）
#　　　戻り値：正常 とし、次の分割ファイルの判定を行う。（無ければ(2)-3へ進む。）
#　　(2)-1-2.エラーファイル　＞　0Byte（有件）の場合
#　　　ディレイド処理依頼情報．処理結果コード ← "2"（業務エラー）
#　　　戻り値：正常 とし、次の分割ファイルの判定を行う。（無ければ(2)-3へ進む。）
#　(2)-2.督促ステータス一括更新エラーファイル または 督促ステータス一括更新処理正常終了フラグファイル が出力されていない場合
#　　(2)-2-1.30未満回目の施行の場合
#　　　1分間待機し再度判定を行う。
#　　(2)-2-2.30回目の施行 かつ ディレイド処理結果ファイル　＞　0Byte（有件）の場合
#　　　ディレイド処理依頼情報．処理結果コード ← "3"（システムエラー）
#　　　戻り値：メジャーエラー とし、次の分割ファイルの判定を行う。（無ければ(2)-3へ進む。）
#　　(2)-2-3.30回目の施行 かつ ディレイド処理結果ファイル　＝　0Byte　または　存在しない　場合
#　　　処理なし、次の分割ファイルの判定を行う。（無ければ(2)-3へ進む。）
#
#　(2)-3.全ファイルを判定後、ディレイド処理依頼情報．処理結果コードの最大値を残す。
#
#(3)Java実行後処理
#　(3)-1.督促ステータス一括更新エラーファイルの中間ファイルをマージする。
#　(3)-2.督促ステータス一括更新エラーファイルの中間ファイルを削除する。
#　(3)-3.督促ステータス一括更新処理正常終了フラグファイル を削除する。
#　(3)-4.督促ステータス一括更新指示ファイルの分割ファイルを削除する。
#　(3)-5.処理結果コードに値が設定された場合、ディレイド処理依頼情報の処理結果コード更新する。
#
#(4)処理終了（戻り値：(2)で判定した処理結果コードの最大）
#
# コマンド形式  ：EO61Y0113D0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v49.00          2020/04/10  FJ) 荒木     【OM-2019-0000382】 エラーリストが出力されない
# v50.00          2020/06/12  FJ) 中原     【OM-2019-0000382】 デバッグログの追加
##############################################################

##############################################################
# 環境変数定義
##############################################################

#
#---ツール格納場所
#
G_TOOLSH=.

#
#---環境変数定義Shell呼び出し
#
. EOK010110J0.sh

#
#---ＪＯＢ名
#
JOBNAME=`basename $0 | sed -e "s/\.sh//g"`

#
#---サービス（業務プロセス）
#
SVC=$JOBNAME

#
#---OPD
#
OPD=$1

#---日中運用日付取得
if [ "${OPD}" = "" -o "${OPD}" = "20991231" ]; then
   . EOK010310J0.sh "ODATE"
fi

#
#---親シェルから渡される引数でファイル名作成
#
# FN1=CHIFM109004_XXXXXXXXXXXXXX
# FN2=CHLST05501_XXXXXXXXXXXXXX
#
FN1=$2
FN2=$3

ENCODE=MS932

##############################################################
# 業務処理
##############################################################
sh ${G_TOOLSH}/EOK010210J0.sh CS00025I $JOBNAME

# ディレイド処理依頼情報ファイルが存在する場合
if [ -f ${FN1} ] ; then
    nkf -Lu < ${FN1} > ${FN1}"_tmp1"
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
    sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO ${FN1} ${FN2} `cat  ${FN1}`"
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
    # ディレイド処理依頼情報が0バイトなら終了
    if [ `wc -c ${FN1}"_tmp1" | awk '{print $1}'` -eq 0 ] ; then
        rm -f ${FN1}"_tmp1"
        sh ${G_TOOLSH}/EOK010210J0.sh CS00026I $JOBNAME
        # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
        sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO ${FN1} ${FN2} `cat  ${FN1}`"
        # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
        exit ${G_RTN_NORMAL}
    fi
     # 処理結果 ≠ 1 なら終了
     # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
     sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO ${FN1} ${FN2} `cat  ${FN1}`"
     # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
    if [ `head -1 ${FN1}"_tmp1" | awk -F, '{print $2}'` -ne '1' ] ; then
        rm -f ${FN1}"_tmp1"
        sh ${G_TOOLSH}/EOK010210J0.sh CS00026I $JOBNAME
        # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
        sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO ${FN1} ${FN2} `cat  ${FN1}` "
        # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
        exit ${G_RTN_NORMAL}
    fi
# ディレイド処理依頼情報ファイルが存在しない場合終了
else
    sh ${G_TOOLSH}/EOK010210J0.sh CS00026I $JOBNAME
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
    sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO ${FN1} ${FN2} `cat  ${FN1}` "
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
    exit ${G_RTN_NORMAL}
fi

# EO61Y0111D0.shからの引き継ぎファイルが存在する場合、ファイルから値取得
# v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO ${FN1} ${FN2} `cat  ${FN1}`"
# v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
if [ -f ${MID_DIR_CH}/EO61Y0111D0_tmp.csv ] ; then
    temp=`cat ${MID_DIR_CH}/EO61Y0111D0_tmp.csv`
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
    sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO "
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END

    # 督促ステータス一括更新エラーファイル フルパスと拡張子を外したファイル名
    RE_FN2=`echo ${temp} | cut -d ',' -f 1`
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
    sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO ${RE_FN2} "
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
    
    # 督促ステータス一括更新指示ファイル フルパスと拡張子を外したファイル名
    RE_FN3=`echo ${temp} | cut -d ',' -f 2`
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
    sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO ${RE_FN3} "
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
    
    # javaアプリ多重実行数
    RUN_CNT=`echo ${temp} | cut -d ',' -f 3`
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
    sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO ${RUN_CNT} "
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
    
    # ディレイド処理依頼番号
    DLYD_TRN_REQ_NO=`echo ${temp} | cut -d ',' -f 4`
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
    sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO ${DLYD_TRN_REQ_NO} "
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END

    # 引き継ぎファイルの削除
    # OM-2019-0000382の対応で一時的にファイル削除をコメントアウトしています。
    #rm ${MID_DIR_CH}/EO61Y0111D0_tmp.csv
# ファイルが存在しない場合終了
else
    sh ${G_TOOLSH}/EOK010210J0.sh CS00026I $JOBNAME
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
    sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO "
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
    exit ${G_RTN_ERROR}
fi

#ディレイド処理依頼情報更新フラグ
flg=0
#ディレイド処理結果コード
DLYD_TRN_RSLT_CD="0"

# v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO ${FN1} ${FN2} `cat  ${FN1}`"
# v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
for (( i=1; i<=RUN_CNT; i++));
do
    TIME_OUT_CNT=30
    
    while [ ${TIME_OUT_CNT} -gt 0 ] ; do
        ((TIME_OUT_CNT--))
        # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
        sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO TIME_OUT_CNT=${TIME_OUT_CNT} `cat  ${FN1}` "
        # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END

        if [ -f ${MID_DIR_CH}/${RE_FN2}_0${i}.csv ] && [ -f ${MID_DIR_CH}/${RE_FN2}_0${i}.flg ] ; then
            # エラーファイル　＞　0Byte（有件）の場合
            if [ -s ${MID_DIR_CH}/${RE_FN2}_0${i}.csv ] ; then
                SUB_DLYD_TRN_RSLT_CD="2"
                flg=1
            else
                SUB_DLYD_TRN_RSLT_CD="1"
                flg=1
            fi
            # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
            sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO SUB_DLYD_TRN_RSLT_CD=${SUB_DLYD_TRN_RSLT_CD} flg=${flg} "
            # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
            
            rc=${G_RTN_NORMAL}
            break
        else
            # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
            sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO ${FN1} ${FN2} `cat  ${FN1}`"
            # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
            if [ ${TIME_OUT_CNT} -eq 0 ] ; then
                # ディレイド処理結果ファイル　＞　0Byte（有件）の場合
                if [ -s ${FN1}"_tmp1" ] ; then
                    SUB_DLYD_TRN_RSLT_CD="3"
                    flg=1
                fi
                # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
                sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO SUB_DLYD_TRN_RSLT_CD=${SUB_DLYD_TRN_RSLT_CD} flg=${flg} `cat  ${FN1}` "
                # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
                
                rc=${G_RTN_ERROR}
            else
               # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
               sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO sleep start "
               # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
                sleep 60
               # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
               sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO sleep end "
               # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
            fi
        fi
    done
    
    echo "${RE_FN2}_0${i} => エラーコード：$rc"
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
    sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO エラーコード：${rc} `cat  ${FN1}` "
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
    
    # ディレイド処理結果コードの設定（ディレイド処理結果コードの最大を残す）
    if [ ${DLYD_TRN_RSLT_CD} -lt $SUB_DLYD_TRN_RSLT_CD ]
    then
        DLYD_TRN_RSLT_CD=$SUB_DLYD_TRN_RSLT_CD
    fi
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
    sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO DLYD_TRN_RSLT_CD=${DLYD_TRN_RSLT_CD} `cat  ${FN1}` "
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
    
    ARRAY_RC[${i}]=${rc}
done

# 処理終了監視
RESULT=0
# v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO ${FN1} ${FN2} `cat  ${FN1}`"
# v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
for RETURNCODE in "${ARRAY_RC[@]}"; do

    rc=$RETURNCODE
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
    sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO rc=${RETURNCODE} `cat  ${FN1}` "
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
    ERR_FLG=0
    if [ $rc -ne 0 ]
    then
       if [ $rc -ne 4 ]
       then
           if [ $rc -ne 8 ]
           then
               if [ $rc -ne 127 ]
               then
                  sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " PROGRAM Error($SVC program:rc=$rc) "
                  echo $JOBNAME " PROGRAM Error($SVC program:rc=$rc) "
                  exit ${G_RTN_ERROR}
               fi
           fi
        fi
        ERR_FLG=1
    fi
    
    # 処理結果の設定（処理結果コードの最大を残す）
    if [ ${RESULT} -lt $rc ]
    then
        RESULT=$rc
    fi
done
# v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO RESULT=${RESULT} `cat  ${FN1}` "
# v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END

if [ ${RESULT} -eq ${G_RTN_NORMAL} ]
then
    # 督促ステータス一括更新エラーファイルのマージと中間ファイルの削除
    cat /dev/null > ${FN2}
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
    sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO ${FN2} "
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
    
    for filename in `find ${MID_DIR_CH} -maxdepth 1 -name "${RE_FN2}_0*.csv"  | sort`; do
        cat ${filename} >> ${FN2}
        # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
        sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO filename=${filename} "
        # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
        # OM-2019-0000382の対応で一時的にファイル削除をコメントアウトしています。
        #rm ${filename}
    done
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
    sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO FN2=${FN2} "
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
    
    # 督促ステータス一括更新処理正常終了フラグファイルを削除
    # OM-2019-0000382の対応で一時的にファイル削除をコメントアウトしています。
    # また、
    for filename in `find ${MID_DIR_CH} -maxdepth 1 -name "${RE_FN2}_0*.flg"  | sort`; do
        # OM-2019-0000382の対応で一時的にファイル削除をコメントアウトしています。
        # また、for文を空で回すことになりエラーが発生するので、代わりにechoを入れています。ファイル削除のコメントアウトの解除後は削除可です。
        #rm ${filename}
        echo ${filename}
    done
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
    sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO FN2=${FN2} "
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
    
    # 督促ステータス一括更新指示ファイルの分割ファイルを削除
    # OM-2019-0000382の対応で一時的にファイル削除をコメントアウトしています。
    for filename in `find ${MID_DIR_CH} -maxdepth 1 -name "${RE_FN3}_*.csv"  | sort`; do
        # OM-2019-0000382の対応で一時的にファイル削除をコメントアウトしています。
        # また、for文を空で回すことになりエラーが発生するので、代わりにechoを入れています。ファイル削除のコメントアウトの解除後は削除可です。
        #rm ${filename}
        echo ${filename}
    done
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
    sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO FN2=${FN2} `cat  ${FN1}` "
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
fi
    
# 処理結果コードに値が設定された場合、ディレイド処理依頼情報の処理結果コード更新
# v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO ${FN1} ${FN2} `cat  ${FN1}`"
# v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END
if [ ${flg} -eq 1 ] ; then
    echo ${DLYD_TRN_REQ_NO}","${DLYD_TRN_RSLT_CD} > ${FN1}"_tmp2"
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
    sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO flg=${flg} `cat  ${FN1}` "
    # v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END

    # 改行コードをCRLFにする
    nkf -Lw  < ${FN1}"_tmp2" > ${FN1}
    rm -f ${FN1}"_tmp1"
    rm -f ${FN1}"_tmp2"
fi
# v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD START
sh ${G_TOOLSH}/EOK010210J0.sh CS00029I $JOBNAME " L$LINENO RESULT=${RESULT} `cat  ${FN1}` "
# v50.00 OM-2019-0000382 2020/06/11  FJ) 中原 ADD END

exit_rc=${RESULT}

#
#--- ジョブの終了メッセージを出力する
#
sh ${G_TOOLSH}/EOK010210J0.sh CS00028I $JOBNAME
sh ${G_TOOLSH}/EOK010210J0.sh CS00026I $JOBNAME

exit $exit_rc
