#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：コンテンツ決済
#
# シェル名      ：コンテンツメール情報インポート処理
#
# 機能          ：コンテンツ管理から受信したメール情報ダンプファイルを、ＣＣＭＧメール情報ワークに対してインポート処理を行う。
#インポート処理後、インポート処理の結果を「メール情報取込み結果ファイル」に出力する。
#
#
# コマンド形式  ：EO4090410J0_01.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
#               ：2013/01/19  FJ)味岡      ST3-2013-0000170:原因不明のtruncateエラーによりログ出力強化実施
#               ：2013/02/01  FJ)味岡      SGY-2013-0000009:DATAPUMP USERの統一化対応
#               ：2013/07/07  FJ)味岡      SGY-2013-0000032:統合DBサーバホスト名シェル取得対応(DB_CONNECT_SKBT_1使用不可)
# v54.00.00     ：2021/07/27  FJ)寺川      ANK-4069-00-00 バッチ・DBサーバーリプレース対応
#
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

#
#---システム日付取得(yyyyMMddHHmmss)
#
. EOK010410J0.sh 2
RSLT_SYS_DATETIME=$RSLT_SYSDATE

#
#---統合DBサーバーの優先先インスタンスのホスト名の取得Shell起動
#

RSLT_HOSTNAME=`${G_TOOLSH}/EOKDBHOST.sh`

#
#---業務で必要な変数定義
#
#xxx=xxxxxxx
##############################################################
# 業務処理
##############################################################
sh ${G_TOOLSH}/EOK010210J0.sh CS00025I $JOBNAME

#
#--- ファイル定義
#
IMPORT_FILE="CNIFE019.dmp"                                           # インポートファイル名
IMPORT_DIRFILE=CNIFE019/${IMPORT_FILE}                               # インポートファイルを格納するディレクトリとファイル名
SOURCEFILE=${GAIBU_RECEIVE_DIR_CN}/${IMPORT_DIRFILE}                 # インポートファイル名(batchサーバ内ディレクトリ格納先付)
SHORI_FILE=${MID_DIR_CN}/CNIFM004001.txt                             # メール情報インポート処理結果ファイル
TARGETDIR=${GAIBU_RECEIVE_DIR_CN}/CNIFE019/bk/CNIFE019_$RSLT_SYS_DATETIME.dmp     # メール情報インポート処理結果ファイル(BK)

. EOK010510J0.sh ${DATAPUMPPASS}
DATAPUMPPASS_1=${RSLT_DECRYPT} ;export DATAPUMPPASS_1

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

P1="OPD=,"
P2="SVCCTL=,"
P3="JOB=EO4090410J0,"
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"

sh ${G_TOOLSH}/EOK010210J0.sh CS00027I $JOBNAME

#
#--- メール情報インポート処理結果ファイルの存在チェックを行う(存在した場合はファイルの削除を行う。
#
if [ -r $SHORI_FILE ]
then
    rm -f $SHORI_FILE
    echo $JOBNAME " File is Deleted($SHORI_FILE) "
fi

#
#--- dampファイルの存在チェックを行う
#
if [ ! -r $SOURCEFILE ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist($SOURCEFILE) "
    echo $JOBNAME " File is nonexist($SOURCEFILE) "
    exit ${G_RTN_ERROR}
fi

#
#--CCMGメール情報ワークTRUNCATE処理
#
#cat <<SQLEOF | sqlplus -s ${ORACLEUSER}/${ORACLEPASS}@${SID_S} > ${MID_DIR_CN}/${JOBNAME}_truncate.log
cat <<SQLEOF| sqlplus -s ${ORACLEUSER}/${ORACLEPASS}@${SID_S} > ${MID_DIR_CN}/${JOBNAME}_truncate.log
    WHENEVER SQLERROR EXIT SQL. SQLCODE
    EXECUTE CCPL0003 ('TRUNCATE TABLE CN_T_CCMG_ML_INF_WK');
SQLEOF

# メール情報ワークTRUNCATE処理結果をチェック(異常の場合はフラグ1にて出力)
rc=$?
if [ $rc -ne 0 ]
then
    ORACODE=`grep ORA- ${MID_DIR_CN}/${JOBNAME}_truncate.log | awk -F: ' { print $1 } ' | head -1`
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " SQL(Truncate) Error($SVC mv:rc=$rc) "
    echo $JOBNAME " SQL(Truncate) Error ${ORACODE} "
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME $ORACODE
    
    while read LOGOUTPUT1
    do
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E "$LOGOUTPUT1"
    done < ${MID_DIR_CN}/${JOBNAME}_truncate.log

    
    # メールインポート処理結果ファイル（LCS側事由エラー）を編集
    ERR_RTN_CD=1
    MST_UPD_ERR=${ERR_RTN_CD}
    echo $MST_UPD_ERR > $SHORI_FILE 2>&1
    exit ${G_RTN_ERROR}
fi

#
#--- dumpファイルをDBサーバーへ転送
#
scp -P ${PORT_NO} ${SOURCEFILE} ${DB_CONNECT_USER}@${RSLT_HOSTNAME}:${DB_DUMP_RENKEI_DIR}

#
#--- dumpファイルDBサーバー転送処理結果をチェック(異常の場合はフラグ1にて出力)
#
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " SCP SEND Error($SVC mv:rc=$rc) "
    echo $JOBNAME " SCP SEND Error "
    
    # メールインポート処理結果ファイル（LCS側事由エラー）を編集
    ERR_RTN_CD=1
    MST_UPD_ERR=${ERR_RTN_CD}
    echo $MST_UPD_ERR > $SHORI_FILE 2>&1
    exit ${G_RTN_ERROR}
fi


#
#--- Import Command 実行
#

# ANK-4069-00-00対応 20211220 寺川 MOD START
#impdp ${DATAPUMPUSER}/${DATAPUMPPASS_1}@${SID_S} DIRECTORY=${DB_DUMP_RENKEI_DIR_IMPDP} DUMPFILE=${IMPORT_FILE} remap_table=${CCMG_TABLE}:CN_T_CCMG_ML_INF_WK REMAP_SCHEMA=${CCMG_USER}:${EO_USER} CONTENT=data_only > ${MID_DIR_CN}/${JOBNAME}_impdp.log 2>&1
ssh -p ${PORT_NO} ${DB_CONNECT_USER}@${RSLT_HOSTNAME} "source /export/home/${DB_CONNECT_USER}/.oracle_profile; impdp ${DATAPUMPUSER}/${DATAPUMPPASS_1}@${SID_S} DIRECTORY=${DB_DUMP_RENKEI_DIR_IMPDP} DUMPFILE=${IMPORT_FILE} remap_table=${CCMG_TABLE}:CN_T_CCMG_ML_INF_WK REMAP_SCHEMA=${CCMG_USER}:${EO_USER} CONTENT=data_only" > ${MID_DIR_CN}/${JOBNAME}_impdp.log 2>&1
# ANK-4069-00-00対応 20211220 寺川 MOD END

#
#--- Import Command 実行の結果をチェック
#

rc=$?

IMP_ERR_CD=0
if [ $rc -ne 0 ]
then
    ORACODE=`grep ORA- ${MID_DIR_CN}/${JOBNAME}_impdp.log | awk -F: ' { print $1 } ' | head -1`
    sh ${G_TOOLSH}/EOK010210J0.sh CS00001E $JOBNAME " Import Error($SVC mv:rc=$rc) ログを確認してください。ログファイル：$LOG、不良ファイル：$BAD "
    echo $JOBNAME " ORACLE ERRERが発生しました。mes.logを確認してください。"
    IMP_ERR_CD=${rc}
    
    # メールインポート処理結果ファイル（EO顧客基幹側事由エラー）を編集
    ERR_RTN_CD=1
    MST_UPD_ERR=${ERR_RTN_CD}
    echo $MST_UPD_ERR > $SHORI_FILE 2>&1
    
    # DBサーバー上のダンプファイルを削除する。
    ssh -p ${PORT_NO} ${DB_CONNECT_USER}@${RSLT_HOSTNAME} rm -f ${DB_DUMP_RENKEI_DIR}${IMPORT_FILE}
    
fi

#
#--- メール情報インポート処理結果ファイルの存在チェックを行う(存在しない場合は正常結果のファイル作成を行う。
#
if [ ! -r $SHORI_FILE ]
then
    RTN_CD=0
    MST_UPD=${RTN_CD}
    echo $MST_UPD > $SHORI_FILE 2>&1
fi

#
#--- DBサーバー上のダンプファイルを削除する。
#

ssh -p ${PORT_NO} ${DB_CONNECT_USER}@${RSLT_HOSTNAME} rm -f ${DB_DUMP_RENKEI_DIR}${IMPORT_FILE}

#
#--- DBサーバー上のダンプファイルを削除結果をチェック
#

rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00001E $JOBNAME " ssh Error($SVC mv:rc=$rc) ログを確認してください。ログファイル：$LOG、不良ファイル：$BAD "
    echo $JOBNAME " ssh Error ($SVC load:rc=$rc) "
    exit ${G_RTN_ERROR}
fi

#
#
#---ダンプファイルバックアップ処理
#
mv -f $SOURCEFILE $TARGETDIR

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 " MV Error($SVC mv:rc=$rc) "
                echo $JOBNAME " MV Error($SVC mv:rc=$rc) "
                exit ${G_RTN_ERROR}
            fi
        fi
    fi
fi

#
#
#---Import Command 実行の結果をチェック
#

if [ $IMP_ERR_CD -ne 0 ]
then
    while read LOGOUTPUT
    do
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E "$LOGOUTPUT"
    done < ${MID_DIR_CN}/${JOBNAME}_impdp.log

    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " Lord Error($SVC Import:rc=127) "
    echo $JOBNAME " Lord Error($SVC Import:rc=127) "
    exit ${G_RTN_ERROR}
fi

exit_rc=$rc

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

exit $rc
