#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：料金管理
#
# シェル名      ：対象キーワーク削除（工事完了報告遅延）
#
# 機能          ：対象キー制御に登録されている前日分の再計算対象請求先情報（前月）を削除する。
#削除対象は以下の通りとし、コードは業務パラメータから取得する。
#［対象］使用機能識別コード　＝　再計算対象請求先情報（前月）
#　　　　使用機能識別コード　＝　再集計対象情報（前月）
#
#【フリー項目】
#工事完了報告遅延区分："1"（報告遅延対象）、前月分を処理対象とする
#
#
# コマンド形式  ：EO3050510J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v4.00           2012/11/29  FJ）今井     【ST2-2012-0001779】新規作成
# v4.01           2013/04/20  FJ）狭間     【ST4-2013-0000XXX】性能改善の為、TRUNCATE＋SQL*Loader方式に変更
# v15.00          2015/06/04  FJ）小島     【OM-2015-0001160】処理が異常終了した際もインデックスリビルド処理が実行されるよう修正
# 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
read OPD <${MID_DIR_AC}/ACIFM037001.csv

# OM-2015-0001160 ADD START
#
#---リターンコード
#
RTN=${G_RTN_NORMAL}
# OM-2015-0001160 ADD END

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

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

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

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

LOAD_SCHEMA=AC_T_TRGT_KEY_WK

LOG_FILE=${SQL_LOADER_LOG_DIR}/${SVC}_${SYSDATE}.log
BAD_FILE=${SQL_LOADER_BAD_DIR}/${SVC}_${SYSDATE}.bad

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

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

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

#
#--- ファイル定義
#
#--- 出力ファイル
OUTFILE_ACIFM220002=${MID_DIR_AC}/ACIFM220002.csv
OUTFILE_ACIFM220002_WK1=${MID_DIR_AC}/${JOBNAME}_ACIFM220002_WK1.csv

#--- 1.業務パラメータ管理（ZM_M_WORK_PARAM_KNRI）
SQLFILE_ZM0321_01=${SQL_DIR}/AC_U_ZM0321_01.sql
SQLFILE_ZM0321_01_TWK_RE_CL_SKY=${SQL_DIR}/${JOBNAME}_CH_U_AC0601_01_TWK_RE_CL_SKY.sql
SQLFILE_ZM0321_01_TWK_RE_SHUK=${SQL_DIR}/${JOBNAME}_CH_U_AC0601_01_TWK_RE_SHUK.sql

CSVFILE_ZM0321_01_TWK_RE_CL_SKY=${MID_DIR_AC}/${JOBNAME}_CH_U_AC0601_01_TWK_RE_CL_SKY.csv
CSVFILE_ZM0321_01_TWK_RE_SHUK=${MID_DIR_AC}/${JOBNAME}_CH_U_AC0601_01_TWK_RE_SHUK.csv

#--- 2.対象キーワーク（ZM_M_WORK_PARAM_KNRI）
SQLFILE_AC0561_03=${SQL_DIR}/AC_U_AC0561_03.sql

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

#
#--- サブルーチン（UNLOAD）
#
UNLOAD(){

#unload
sh ${G_TOOLSH}/EOKULD03.sh $1 $2
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " unload error($2:rc=$rc) "
    echo $JOBNAME " unload error($2:rc=$rc) "
    exit ${G_RTN_ERROR}
fi
}

#
#--- アンロードファイルのクリアを行う
#
cat /dev/null > ${OUTFILE_ACIFM220002}
cat /dev/null > ${OUTFILE_ACIFM220002_WK1}

#
#--- パラメータセット
cp -f ${SQLFILE_ZM0321_01} ${SQLFILE_ZM0321_01_TWK_RE_CL_SKY}
sed -i -e "s%:OPE_DATE%'${RSLT_OPEDATE}'%"         ${SQLFILE_ZM0321_01_TWK_RE_CL_SKY}
sed -i -e "s%:WORK_PARAM%'AC_TWK_RE_CL_SKY_NO2'%"  ${SQLFILE_ZM0321_01_TWK_RE_CL_SKY}

cp -f ${SQLFILE_ZM0321_01} ${SQLFILE_ZM0321_01_TWK_RE_SHUK}
sed -i -e "s%:OPE_DATE%'${RSLT_OPEDATE}'%"         ${SQLFILE_ZM0321_01_TWK_RE_SHUK}
sed -i -e "s%:WORK_PARAM%'AC_TWK_RE_SHUK_NO2'%"    ${SQLFILE_ZM0321_01_TWK_RE_SHUK}

#
#--- UNLOAD処理
#
UNLOAD ${SQLFILE_AC0561_03}               ${OUTFILE_ACIFM220002_WK1} &
UNLOAD ${SQLFILE_ZM0321_01_TWK_RE_CL_SKY} ${CSVFILE_ZM0321_01_TWK_RE_CL_SKY} &
UNLOAD ${SQLFILE_ZM0321_01_TWK_RE_SHUK}   ${CSVFILE_ZM0321_01_TWK_RE_SHUK}

#--- すべての抽出が終了するのを待つ
wait

#
#--- 業務パラメータを取得
#
TWK_RE_CL_SKY=`cat ${CSVFILE_ZM0321_01_TWK_RE_CL_SKY}`
TWK_RE_SHUK=`cat ${CSVFILE_ZM0321_01_TWK_RE_SHUK}`

#--- 削除対象以外を抽出
bsortex \
  -copy \
  -record recform=txtcsv \
  -input reclen=350 \
    omit="1.9asc.eq.'${TWK_RE_CL_SKY}'.or.1.9asc.eq.'${TWK_RE_SHUK}'" \
    file=${OUTFILE_ACIFM220002_WK1} \
  -output file=${OUTFILE_ACIFM220002}
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " bsortex error($OUTFILE_ACIFM220002:rc=$rc) "
    echo $JOBNAME " bsortex error($OUTFILE_ACIFM220002:rc=$rc) "
    exit ${G_RTN_ERROR}
fi

#
#--- 対称キーワークテーブル削除
#
#オラクル接続情報
DBCONNECT=$ORACLEUSER/$ORACLEPASS@$SID_S

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

#接続
#RESULT=`sqlplus -s ${DBCONNECT} <<EOF 
RESULT=`sqlplus -s ${DBCONNECT} <<EOF
whenever oserror exit 127;
whenever sqlerror exit 127;
set head off;
set termout off;
set trims on;

EXECUTE CCPL0003('truncate table ${LOAD_SCHEMA}');

exit 0;
EOF`

RTNCD=$?

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

#
#--- SQL*Loader情報定義
#
sqlldr ${ORACLEUSER}/${ORACLEPASS}@${SID_S},CONTROL=${SQL_LOADER_CTL_DIR}/${LOAD_SCHEMA}_02.ctl,DATA=${OUTFILE_ACIFM220002},LOG=${LOG_FILE},BAD=${BAD_FILE}
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " LOAD Error($SVC load:rc=$rc) ログを確認してください。ログファイル：${LOG_FILE}、不良ファイル：${BAD_FILE} "
    echo $JOBNAME " LOAD Error($SVC load:rc=$rc) "
# OM-2015-0001160 MOD START
#    exit ${G_RTN_ERROR}
    RTN=${G_RTN_ERROR}
# OM-2015-0001160 MOD END
fi

#
#--- インデックスリビルド
#
sh ${G_TOOLSH}/EOKINDEXREBUILD.sh -t ${LOAD_SCHEMA} -m ${IDX_REBUILD_PARALLEL_CNT} -e
rc=$?
if [ $rc -ne 0 ]
then
    ERRMSG=" インデックスの再作成に失敗しました。ログを確認してください。($SVC rebuild:rbldrc=$rc) "
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME ${ERRMSG}
    echo $JOBNAME ${ERRMSG}
# OM-2015-0001160 MOD START
#    exit ${G_RTN_ERROR}
    RTN=${G_RTN_ERROR}
# OM-2015-0001160 MOD END
fi

# OM-2015-0001160 DEL START
#exit_rc=$rc
# OM-2015-0001160 DEL END

#ワーク削除
if [ $WK_RM = "true" ]
then
    rm -f ${OUTFILE_ACIFM220002_WK1}
    rm -f ${SQLFILE_ZM0321_01_TWK_RE_CL_SKY}
    rm -f ${SQLFILE_ZM0321_01_TWK_RE_SHUK}
    rm -f ${CSVFILE_ZM0321_01_TWK_RE_CL_SKY}
    rm -f ${CSVFILE_ZM0321_01_TWK_RE_SHUK}
fi
#
#--- ジョブの終了メッセージを出力する
#
sh ${G_TOOLSH}/EOK010210J0.sh CS00028I $JOBNAME
sh ${G_TOOLSH}/EOK010210J0.sh CS00026I $JOBNAME

# OM-2015-0001160 MOD START
#exit $exit_rc
exit ${RTN}
# OM-2015-0001160 MOD END
