#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：請求収納
#
# シェル名      ：料金請求バックアップテーブル登録
#
# 機能          ：各スキーマの削除レコード情報をもとに書くスキーマのバックアップテーブルへの登録を行う。
#
# コマンド形式  ：EO61U0190J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v6.00           2013/11/22  FJ)伊藤     【】新規作成（IT1-2013-0001578より分割）
#
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

#
#---業務で必要な変数定義
#

. EOK010410J0.sh "1"
SYSDATE=${RSLT_SYSDATE}

#
#--- サブルーチン（エラー時）
#
ERRORMESS(){
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME $1
    echo $JOBNAME $1
}

#
#--- サブルーチン（isNullorEmptyっぽいの）
#
IS_NULL_OR_EMPTY(){
    CHECK=`eval echo '$'"$1"`
    if [ "${CHECK}" = "" ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " 変数$1は文字列がNULLもしくは空です。テキスト行数:$2"
        echo $JOBNAME " 変数$1は文字列がNULLもしくは空です。テキスト行数:$2"
        exit ${G_RTN_ERROR}
    fi
}

#
#--- 入力ファイル存在、読み込みチェック
#
EXIST(){
    if [ ! -e $1 ]
    then
        ERRORMESS " ファイルが存在しません($1) "
        return 1
    fi
    if [ ! -r $1 ]
    then
        ERRORMESS " ファイルを読み込めません($1) "
        return 1
    fi
    return 0
}

EXIST_WK(){
    if [ ! -e $1 ]
    then
        ERRORMESS " ファイルが存在しません($1)、テキストファイル（${WORK_LIST}）を確認してください。テキスト行数:$2 "
        return 1
    fi
    if [ ! -r $1 ]
    then
        ERRORMESS " ファイルを読み込めません($1) 、テキストファイル（${WORK_LIST}）を確認してください。テキスト行数:$2"
        return 1
    fi
    return 0
}

#-- ワーク削除フラグ
WK_RM=true

#作業指定のパラメータが入ってるファイル
WORK_LIST=${MID_DIR_CH}/EO61U0160J0_LOAD_INFO.txt

EXIST ${WORK_LIST}
INPUT_RC=$?

if [ ${INPUT_RC} -ne 0 ]
then
    ERRORMESS " 作業ファイル指定テキストファイルに異常があります"
    exit ${G_RTN_ERROR}
fi

#空チェック
if [ ! -s ${WORK_LIST} ]
then
    echo " 作業情報テキスト（${WORK_LIST}）が空です、処理を終了します。 "
    exit 0
fi

#ファイルを一行ずつ配列に読み込む
IFS=$'\r\n'
FILE=(`cat "${WORK_LIST}"`)

#使った後はちゃんと戻しましょう
IFS=' '

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

#
#---パラメタ定義
#

P1="OPD=,"
P2="SVCCTL=,"
P3="JOB=EO61U0190J0,"
P4="IND1=,"
P5="INF1=,"
P6="IND2=,"
P7="INF2=,"
P8="OTD1=,"
P9="OTF1=,"
P10="OTD2=,"
P11="OTF2=,"
P12="TABLENAME=,"
P13="SQLKEY=,"
P14="SQLPARAM=,"
P15="ERRFILE=,"
P16="RECOVERY=,"
P17="BREAKPTN=,"
P18="FREE="
PARA="$P1$P2$P3$P4$P5$P6$P7$P8$P9$P10$P11$P12$P13$P14$P15$P16$P17$P18"

PIDS=()
RCS=()

COUNT=0
for WORK_PARAMS in "${FILE[@]}"; do
(
    ROWS_COUNT=`expr ${COUNT} + 1`
    #読み込んだ文字列を置換して配列に代入
    
    WORK_PARAM=(`echo "$WORK_PARAMS" | tr -t ';' ' '`)
    
    PARAMS_COUNT=${#WORK_PARAM[@]}
    if [ ${PARAMS_COUNT} -ne 2 ]
    then
        ERRORMESS "配列の要素数が2以外(PARAMS_COUNT:$PARAMS_COUNT)です、テキストファイル（${WORK_LIST}）を確認してください。テキスト行数:${ROWS_COUNT}　配列WORK_PARAM：${WORK_PARAM[*]}"
        exit ${G_RTN_ERROR}
    fi
    
    #コントロールファイル名を設定
    SQL_CONTROL=${SQL_LOADER_CTL_DIR}/${WORK_PARAM[0]}

    #インプットファイル名を設定
    INPUT_FILE=${MID_DIR_CH}/${WORK_PARAM[1]}

    INPUT_RC=0

    EXIST_WK ${SQL_CONTROL} ${ROWS_COUNT}
    INPUT_RC=`expr ${INPUT_RC} + $?`
    EXIST_WK ${INPUT_FILE} ${ROWS_COUNT}
    INPUT_RC=`expr ${INPUT_RC} + $?`
    
    if [ ${INPUT_RC} -ne 0 ]
    then
        ERRORMESS " 入力ファイルに異常があります。テキストファイル（${WORK_LIST}）を確認してください。テキスト行数:${ROWS_COUNT}"
        exit ${G_RTN_ERROR}
    fi
    
    #空チェック
    if [ ! -s ${INPUT_FILE} ]
    then
        echo " 削除情報ファイル（${INPUT_FILE}）が空です、処理を終了します。テキスト行数:${ROWS_COUNT} "
        exit ${G_RTN_NORMAL}
    fi

    #ロード対象スキーマ
    TABLE_NAME=${WORK_PARAM[0]/_T_[0-9]*/_T}

    #ログファイルの吐き先
    LOG_FILE=${SQL_LOADER_LOG_DIR}/${JOBNAME}_${TABLE_NAME}_${SYSDATE}.log
    BAD_FILE=${SQL_LOADER_BAD_DIR}/${JOBNAME}_${TABLE_NAME}_${SYSDATE}.bad

    sqlldr ${ORACLEUSER}/${ORACLEPASS}@${SID_S} CONTROL=${SQL_CONTROL} DATA=${INPUT_FILE} LOG=${LOG_FILE} BAD=${BAD_FILE}

    rc=$?
    if [ $rc -ne 0 ]
    then
        ERRMSG=" データロードに失敗しました：${TABLE_NAME}($SVC load:rc=$rc) ログを確認してください。ログファイル：${LOG_FILE}、不良ファイル：${BAD_FILE}、テキスト行数:${ROWS_COUNT}  "
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME ${ERRMSG}
        echo $JOBNAME ${ERRMSG}
        exit ${G_RTN_ERROR}
    else
        echo "データロードは正常に終了しました:${TABLE_NAME}　テキスト行数:${ROWS_COUNT} "
    fi
    
    #インデックスリビルド
    sh ${G_TOOLSH}/EOKINDEXREBUILD.sh -t ${TABLE_NAME} -m ${IDX_REBUILD_PARALLEL_CNT} -e
    
    rbldrc=$?
    if [ $rbldrc -ne 0 ]
    then
        ERRMSG=" インデックスの再作成に失敗しました。ログを確認してください。($SVC rebuild:rbldrc=$rbldrc) "
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME ${ERRMSG}
        echo $JOBNAME ${ERRMSG}
        exit ${G_RTN_ERROR}
    fi
) &
PIDS[${COUNT}]=$!
COUNT=`expr ${COUNT} + 1`
done


IFS=$'\n'
COUNTER=(`seq 0 ${COUNT}`)
IFS=' '

for COUNT in "${COUNTER[@]}"; do
wait ${PIDS[$COUNT]}
RCS[${COUNT}]=$?
done

FLAG=0

for COUNT in "${COUNTER[@]}"; do
RC=${RCS[$COUNT]}
ROWCOUNT=`expr ${COUNT} + 1`
    if [ ${RC} -ne 0 ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " ロード処理でエラーが発生しました(読込テキスト行数：${ROWCOUNT}) "
        echo $JOBNAME " ロード処理でエラーが発生しました(読込テキスト行数：${ROWCOUNT}) "
        FLAG=1
    fi
done

if [ ${FLAG} -ne 0 ]
then
    exit ${G_RTN_ERROR}
fi

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

exit ${G_RTN_NORMAL}
