#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：物流管理
#
# シェル名      ：宅内機器情報取込（出荷送信）
#
# 機能          ：宅内機器取得依頼ファイルの内容をSQLLoaderで宅内機器情報テーブルに登録する。
#
# コマンド形式  ：EO50I0210J5.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
#
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1
#---運用日の指定がない場合、運用日付を取得する
if [ "${OPD}" = "" ]; then
   . EOK010310J0.sh "NDATE"
   OPD="${RSLT_OPEDATE}"
fi
echo "OPD[NDATE]=${OPD}"

#
# システム日付を取得
. EOK010410J0.sh 2
TODAY="${RSLT_SYSDATE}"
#
#---業務で必要な変数定義
#
#xxx=xxxxxxx

#中間ファイルIF
MID_IF=DKIFE040

#前バッチ
PREV_JOBNAME=EO5070710J0

#次バッチ
NEXT_JOBNAME=EO5070310J0

#中間ファイル
MIDFILE=${MID_DIR_DK}/${PREV_JOBNAME}_${MID_IF}.csv

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

# SQL*Loader情報設定
LD_TABLENAME="DK_T_BAT_TKKIKI_WK"

# データ削除
sqlplus -s ${ORACLEUSER}/${ORACLEPASS}@${SID_S} @${SQL_DIR}/DK_D_DK0501_01.sql ${NEXT_JOBNAME}

#--- 中間ファイルから外部ファイル名を取得
if [ ! -e $MIDFILE ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00026I $JOBNAME
    exit ${G_RTN_NORMAL}
fi

loadfile=`cat $MIDFILE | tr -d '\r\n'`
utf8loadfile=`echo ${loadfile} | sed -e 's/.csv$/_UTF8.csv/'`
flgfile=`echo ${loadfile} | sed -e 's/csv$/flg/'`

#--- 受信ファイルがない場合はループする
FILECHECK="NG"
CHECKTIME=0
while [ "$FILECHECK" = "NG" ]
do
    # ファイルの存在チェック
    if [ ! -e $flgfile ]
    then
        # タイムアウト時間になったら異常終了する
        if [ ${CHECKTIME} -ge ${TN_BAT_TIMEOUT} ]
        then
            echo "受信ファイルタイムアウト ファイル名:"$flgfile
            sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME "受信ファイルタイムアウト。 ファイル名:"$flgfile
            sh ${G_TOOLSH}/EOK010210J0.sh CS00026I $JOBNAME
            exit ${G_RTN_ERROR}
        fi
        # ファイルが存在しない場合 スリープ
        sleep ${TN_BAT_SLEEP_TIME}
    else
        FILECHECK="OK"
    fi
    # 処理時間を加算
    CHECKTIME=$(($CHECKTIME+${TN_BAT_SLEEP_TIME}))
done

# プロセスＩＤ
PID=$$

TMP_FILE=${loadfile}.temp.${PID}
UTF8_TMP_FILE=${loadfile}.UTF8.temp.${PID}

#--- SJISからUTF-8に変換
nkf -x -w80 $loadfile > $utf8loadfile

# ファイルを１行ずつ読み込みプロセスID(次バッチID)付与する
while read readData
do
    echo "\"$NEXT_JOBNAME\"",$readData | nkf -x -w
done < $utf8loadfile > $UTF8_TMP_FILE
rc=$?
if [ $rc -ne 0 ] ; then
    echo "一時ファイルの作成に失敗しました"
    rm -f ${utf8loadfile}
    rm -f ${UTF8_TMP_FILE}
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME "一時ファイルの作成に失敗しました。 ファイル名:"$TMP_FILE
    sh ${G_TOOLSH}/EOK010210J0.sh CS00026I $JOBNAME
    exit ${G_RTN_ERROR}
fi

# 受信ファイルに運用日と処理ＩＤをセット
sh EOK010610J0.sh $JOBNAME $OPD $UTF8_TMP_FILE

#--- UTF-8からSJISに変換
nkf -x -s $UTF8_TMP_FILE > $TMP_FILE

# SQL*Loader実行
sqlldr ${ORACLEUSER}/${ORACLEPASS}@${SID_S},control=${SQL_LOADER_CTL_DIR}/${LD_TABLENAME}.ctl,data=${TMP_FILE},log=${SQL_LOADER_LOG_DIR}/${LD_TABLENAME}_${TODAY}.log,bad=${SQL_LOADER_BAD_DIR}/${LD_TABLENAME}_${TODAY}.bad
rc=$?

# TMPファイルの削除
rm -f ${utf8loadfile}
rm -f ${UTF8_TMP_FILE}
rm -f ${TMP_FILE}

#実行結果判定
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " PROGRAM Error($SVC program:rc=$rc) "
    echo $JOBNAME " PROGRAM Error($SVC program:rc=$rc) "
    if [ $rc -ne 8 ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " LOAD Error($SVC load:rc=$rc) ログを確認してください。ログファイル：${LD_TABLENAME}_${TODAY}.log、不良ファイル：${LD_TABLENAME}_${TODAY}.bad "
        echo $JOBNAME " LOAD Error($SVC load:rc=$rc) "
        if [ $rc -ne 127 ]
        then
            sh ${G_TOOLSH}/EOK010210J0.sh CS00026I $JOBNAME
            exit ${G_RTN_ERROR}
        fi
    fi
fi

# SQL*Loaderに成功したら中間ファイルを削除、受信データをバックアップ
if [ $rc -eq 0 ]
then
    # 受信フラグをバックアップ
    mv -f $flgfile ${GAIBU_RECEIVE_DIR_DK}/${MID_IF}/bk/.
    rc=$?

    # 受信データをバックアップ
    mv -f $loadfile ${GAIBU_RECEIVE_DIR_DK}/${MID_IF}/bk/.
    rc2=$?

    if [ $rc -ne 0 -o $rc2 -ne 0 ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " MV Error($SVC mv:rc=$rc) "
        echo $JOBNAME " MV Error($SVC mv:rc=$rc) "
        sh ${G_TOOLSH}/EOK010210J0.sh CS00026I $JOBNAME
        exit ${G_RTN_ERROR}
    fi

    # 中間ファイル削除
    rm -f ${MIDFILE}
fi

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

exit $rc
