#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：料金管理
#
# シェル名      ：サービス契約情報クリア
#
# 機能          ：請求日翌日起動。
#2ヶ月前の請求年月の情報を削除する。
#
# コマンド形式  ：EO30101C0J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v5.00           2013/07/05  FJ) 狭間    【LT-2013-0000304】性能改善の為、UNLOAD→TRUNCATE→LOAD方式に変更。
# v9.00           2014/07/18  FJ）後藤    【ST4-2014-0000046】サービス契約蓄積レンジ化に伴い、truncate partition に変更
# 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

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

#---ワークファイル削除モード
WK_RM=true

#---システム日時取得
. EOK010410J0.sh "1"
SYSDATE=${RSLT_SYSDATE}

#---運用日付取得
if [ "${OPD}" = "" ]; then
   . EOK010310J0.sh "BDATE"
else
   RSLT_OPEDATE="${OPD}"
fi

#- クリア対象請求年月取得（料金計算日基準）
EVENT_CD="03"
. EO3SEIKYYM.sh ${EVENT_CD} ${RSLT_OPEDATE} ${JOBNAME}

DELETE_SEIKY_YM=$(date +%Y%m --date "${SEIKY_YM}01 2 month ago")


TRUNCATE_SCHEMA=AC_T_SVKEI_CHIKUSEKI

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

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

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

#
#--- ファイル定義
#
#--- 当月分削除SQL（レンジ化されていない環境用）
SQL_FILE=${SQL_DIR}/AC_D_AC0461_01.sql

#- 当月分削除SQLワーク
SQL_FILE_TEMP1=${SQL_DIR}/${JOBNAME}_AC_D_AC0461_01_WK_1.sql

#- SQL実行結果ログ
SQL_LOG=${SQL_LOADER_LOG_DIR}/${JOBNAME}_${SYSDATE}.log

#- パーティション名
PARTITION_NAME=${TRUNCATE_SCHEMA}_PT_${DELETE_SEIKY_YM}

#--- シスログメッセージ出力
msgToSyslog() {
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E ${JOBNAME} "$1"
        exit ${G_RTN_ERROR}
}

#--- 2ヶ月前クリア
#
#
#- 環境判定
#
#RESULT=`sqlplus -s  ${ORACLE_OWNER_USER}/${ORACLE_OWNER_PASS}@${SID_S} <<EOF 
RESULT=`sqlplus -s  ${ORACLE_OWNER_USER}/${ORACLE_OWNER_PASS}@${SID_S} <<EOF

whenever oserror exit 127;
whenever sqlerror exit 127;
set head off;
set termout off;
set trims on;

SELECT 
    COUNT(*)
FROM
    USER_PART_TABLES
WHERE
    TABLE_NAME = '${TRUNCATE_SCHEMA}';
exit 0;
EOF`

RTNCD=$?

#オラクルエラー発生時
if [ ${RTNCD} -ne 0 ]
then
    #シスログにメッセージを出力し処理終了
    msgToSyslog "USER_PART_TABLES取得でエラーが発生しました。（TABLE_NAME=AC_T_SVKEI_CHIKUSEKI）" 
fi

CNT=`echo ${RESULT} |grep -e "[0-9]"`

#- 取得結果 ＝ 0 の場合DELETE
#- 取得結果 ≠ 0 の場合TRUNCATE 
if [ ${CNT} -eq 0 ]
then
    #- バインド変数置換
    cp ${SQL_FILE} ${SQL_FILE_TEMP1}

    sed -i -e "s%:SQL_LOG%${SQL_LOG}%"            ${SQL_FILE_TEMP1}
    sed -i -e "s%:SEIKY_YM%${DELETE_SEIKY_YM}%"   ${SQL_FILE_TEMP1}
    
    #- DELETE
    sqlplus -s ${ORACLEUSER}/${ORACLEPASS}@${SID_S} @${SQL_FILE_TEMP1} ${JOBNAME}
    
    rc=$?
    if [ $rc -ne 0 ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " Delete Error($SVC delete:rc=$rc) "
        echo $JOBNAME " Delete Error($SVC delete:rc=$rc) "
        exit ${G_RTN_ERROR}
    fi
else
    #- TRUNCATE
    sh ${G_TOOLSH}/EO3TRNCPT.sh ${TRUNCATE_SCHEMA} ${PARTITION_NAME} ${JOBNAME}
    
    rc=$?
    if [ $rc -ne 0 ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " Truncate Error($SVC truncate:rc=$rc) "
        echo $JOBNAME " Truncate Error($SVC truncate:rc=$rc) "
        exit ${G_RTN_ERROR}
    fi
fi

#ワーク削除
if [ $WK_RM = "true" ]
then
    rm -f ${SQL_FILE_TEMP1}
fi

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

exit ${G_RTN_NORMAL}
