#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：顧客対応履歴管理
#
# シェル名      ：ｅｏＭｅｓｓｅｎｇｅｒメッセージ削除処理（サブシェル）
#
# 機能          ：eoMessengerの使用により登録されたメッセージ情報のうち
#指定期日が到来したデータを物理削除する。
#（sqlplus使用、Java未使用）
#
#「DARC生成後に手修正要」
#
# コマンド形式  ：EO90U0110J0_01.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
#
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

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

#---システム日時取得
if [ "${OPD}" = "" ]
then
    . EOK010410J0.sh "3"
    CR_EOMES_SYSDATE=`echo ${RSLT_SYSDATE}`
else
    #引数に日付が渡された場合はシステム日付として処理する
    CR_EOMES_SYSDATE="${OPD}"
fi
echo "システム日付：${CR_EOMES_SYSDATE}"

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

#
#---ＡＰＬ起動
#

#--------------------------------------------------------
#---eoMessengerメッセージ保有月数取得
#--------------------------------------------------------
echo eoMessengerメッセージ保有月数:${CR_EOMES_MSG_HOYU_MON}

#--------------------------------------------------------
#---削除対象日付算出
#--------------------------------------------------------
ECHO_OUT=`$ORACLE_HOME/bin/sqlplus -s $CR_EOMES_ORACLEUSER/$CR_EOMES_ORACLEPASS@$CR_EOMES_SID_S <<EOF
    SET PAGESIZE 0
    SET FEEDBACK OFF
    WHENEVER OSERROR EXIT 8
    WHENEVER SQLERROR EXIT 9
    SELECT TO_CHAR(ADD_MONTHS(TO_DATE(${CR_EOMES_SYSDATE},'YYYYMMDD'), -${CR_EOMES_MSG_HOYU_MON}), 'YYYYMMDD') FROM DUAL;
    exit 0;
EOF 2>&1`

rc=$?

#メッセージ１行化
ECHO_OUT1=`echo "${ECHO_OUT}"  | tr -d  "\015" `
ECHO_OUT2=`echo "${ECHO_OUT1}" | tr -d  "\012" `

#処理結果判定
if [ ${rc} -eq 0 ]
then
    #成功
    sh ${G_TOOLSH}/EOK010210J0.sh "CS00029I" ${JOBNAME} "eoMessengerメッセージ削除対象日付算出 成功 (${SVC}:rc=${rc}):削除対象日付:${ECHO_OUT2}"
elif [ ${rc} -eq 8 ]
then
    #メッセージを出力し処理終了(OSERROR)
    sh ${G_TOOLSH}/EOK010210J0.sh CS00003W ${JOBNAME} "削除月の取得処理でエラーが発生しました。rc:${rc}(OSERROR):${ECHO_OUT2}"
    exit ${G_RTN_WARN}
elif [ ${rc} -eq 9 ]
then
    #メッセージを出力し処理終了(SQLERROR)
    sh ${G_TOOLSH}/EOK010210J0.sh CS00003W ${JOBNAME} "削除月の取得処理でエラーが発生しました。rc:${rc}(SQLERROR):${ECHO_OUT2}"
    exit ${G_RTN_WARN}
else
    #メッセージを出力し処理終了(ERROR)
    sh ${G_TOOLSH}/EOK010210J0.sh CS00003W ${JOBNAME} "削除月の取得処理でエラーが発生しました。rc:${rc}(ERROR):${ECHO_OUT2}"
    exit ${G_RTN_WARN}
fi

DEL_YYYYMMDD=${ECHO_OUT}
echo eoMessengerメッセージ削除対象日付:${DEL_YYYYMMDD}

#バッチパラメータの確認
if [ "${DEL_YYYYMMDD}" = "" ]
then
   #シスログにメッセージを出力し処理終了
    sh ${G_TOOLSH}/EOK010210J0.sh CS00003W ${JOBNAME} "削除月の取得処理でエラーが発生しました。（削除対象期間が空白です）"
    exit ${G_RTN_WARN}
fi

#--------------------------------------------------------
#---削除対象日時編集
#--------------------------------------------------------
DEL_DTM="${DEL_YYYYMMDD}999999"

echo eoMessengerメッセージ削除対象日付[時分秒]:${DEL_DTM}
sh ${G_TOOLSH}/EOK010210J0.sh "CS00029I" ${JOBNAME} "eoMessengerメッセージ削除対象日付[時分秒]:${DEL_DTM}"

#--------------------------------------------------------
#---削除処理
#   １．eoMessengerメッセージ受信内訳
#   ２．eoMessengerメッセージ
#--------------------------------------------------------
ECHO_OUT=$(sqlplus ${CR_EOMES_ORACLEUSER}/${CR_EOMES_ORACLEPASS}@${CR_EOMES_SID_S} << EOF  2>&1
    SET ECHO OFF
    SET PAUSE OFF
    SET TIME OFF
    SET TRIM OFF
    WHENEVER OSERROR EXIT 8 ROLLBACK
    WHENEVER SQLERROR EXIT 9 ROLLBACK

    VARIABLE prm_del_dtm CHAR(14)
    BEGIN
      :prm_del_dtm := ${DEL_DTM};
    END;
    /
    -- eoMessengerメッセージ受信内訳削除
    DELETE CR_T_EOMES_MSGRC_UW EMRU
    WHERE
      EXISTS (
               SELECT
                 1
               FROM
                 CR_T_EOMES_MSG EMSG
               WHERE
                 EMSG.EOMES_MSG_NO = EMRU.EOMES_MSG_NO
                 AND EMSG.EOMES_SEND_DTM <= :prm_del_dtm
              )
    ;
    -- eoMessengerメッセージ削除
    DELETE CR_T_EOMES_MSG EMSG
    WHERE
      EMSG.EOMES_SEND_DTM <= :prm_del_dtm
    ;
    EXIT 0;
    EOF
)

rc=$?
    
echo eoMessengerメッセージ削除処理：結果コード：${rc}

#メッセージ１行化
ECHO_OUT1=`echo "${ECHO_OUT}"  | tr -d  "\015" `
ECHO_OUT2=`echo "${ECHO_OUT1}" | tr -d  "\012" `

#処理結果判定
if [ ${rc} -eq 0 ]
then
    #成功
    sh ${G_TOOLSH}/EOK010210J0.sh "CS00029I" ${JOBNAME} "eoMessengerメッセージ削除処理 成功 (${SVC}:rc=${rc}):${ECHO_OUT2}"
elif [ ${rc} -eq 8 ]
then
    #メッセージを出力し処理終了(OSERROR)
    sh ${G_TOOLSH}/EOK010210J0.sh CS00003W ${JOBNAME} "eoMessengerメッセージ削除処理 (OSERROR)(${SVC}:rc=${rc})"
    sh ${G_TOOLSH}/EOK010210J0.sh CS00003W ${JOBNAME} "eoMessengerメッセージ削除処理 OSERROR:${ECHO_OUT2}"
    exit ${G_RTN_WARN}
elif [ ${rc} -eq 9 ]
then
    #メッセージを出力し処理終了(SQLERROR)
    sh ${G_TOOLSH}/EOK010210J0.sh CS00003W ${JOBNAME} "eoMessengerメッセージ削除処理 (SQLERROR)(${SVC}:rc=${rc})"
    sh ${G_TOOLSH}/EOK010210J0.sh CS00003W ${JOBNAME} "eoMessengerメッセージ削除処理 実行SQL：${ECHO_OUT2}"
    exit ${G_RTN_WARN}
else
    #メッセージを出力し処理終了(ERROR)
    sh ${G_TOOLSH}/EOK010210J0.sh CS00003W ${JOBNAME} "eoMessengerメッセージ削除処理 (ERROR)(${SVC}:rc=${rc})"
    sh ${G_TOOLSH}/EOK010210J0.sh CS00003W ${JOBNAME} "eoMessengerメッセージ削除処理 実行SQL：${ECHO_OUT2}"
    exit ${G_RTN_WARN}
fi

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

exit ${exit_rc}
