#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：契約管理
#
# シェル名      ：ブロッキング情報受信登録
#
# 機能          ：RULIサーバより連携されるブロッキング認証ID情報をブロッキング情報に登録する。
#
#
# コマンド形式  ：EO2HP0120J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v49.00.00      2020/03/23   FJ)中原     【ANK-3834-00-00】マルウェアブロッキング
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1
if [ "${OPD}" = ""  ]; then
   . EOK010310J0.sh "NDATE"
else
   RSLT_OPEDATE="${OPD}"
fi
OPEDATE="${RSLT_OPEDATE}"

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

#
#--- ファイル定義
#
KKIFE434_TXT_LS=${GAIBU_RECEIVE_DIR_KK}/KKIFE434/DNSBLOCKING_[0-9]*.txt
KKIFE434_CNT_LS=${GAIBU_RECEIVE_DIR_KK}/KKIFE434/DNSBLOCKING_CNT_*.txt
KKIFE434_FLG_LS=${GAIBU_RECEIVE_DIR_KK}/KKIFE434/DNSBLOCKING_*.flg
KKIFE434_TXT_INC_TRUE=${LOC_DIR_KK}/${JOBNAME}_KKIFE434_TXT_INC_TRUE.txt
KKIFE434_TXT_INC_FALSE=${LOC_DIR_KK}/${JOBNAME}_KKIFE434_TXT_INC_FALSE.txt
KKIFE434_TXT_MARGE=${LOC_DIR_KK}/${JOBNAME}_KKIFE434_TXT_MARGE.txt

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

LOADFILE=${LOC_DIR_KK}/${JOBNAME}_KKIFE434_TXT_LOAD.txt
LOG_FILE=${SQL_LOADER_LOG_DIR}/${JOBNAME}_${SYSDATE}.log
BAD_FILE=${SQL_LOADER_BAD_DIR}/${JOBNAME}_${SYSDATE}.bad
LOAD_SCHEMA=KK_T_BLOCKING_INFO

#SQL*Loaderコントロールファイル
SQLCONTROL=${SQL_LOADER_CTL_DIR}/KK_T_BLOCKING_INFO_01.ctl
SQLCONTROL_WK=${SQL_LOADER_CTL_DIR}/${JOBNAME}_KK_T_BLOCKING_INFO_01_WK.ctl

##############################################################
# 共通関数
##############################################################

#
#--- bsortexコマンド実行時のエラー処理
#      p1：bsortexコマンドの終了コード
#      p2：bsortexコマンドの入力ファイル
BSORT_ERROR()
{
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " bsortex error(input file=$2:rc=$1) "
    echo $JOBNAME " bsortex error(input file=$2:rc=$1) "
    exit ${G_RTN_ERROR}
}


#
#--- 各ファイルの存在チェック
#

if [ ! -r ${KKIFE434_TXT_LS} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${GAIBU_RECEIVE_DIR_KK}/KKIFE434/DNSBLOCKING_YYYYMMDD000000.txt) "
    echo $JOBNAME " File is nonexist(${GAIBU_RECEIVE_DIR_KK}/KKIFE434/DNSBLOCKING_YYYYMMDD000000.txt)  "
    exit ${G_RTN_ERROR}
fi
KKIFE434_TXT=`ls  ${KKIFE434_TXT_LS}`

if [ ! -r ${KKIFE434_CNT_LS} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${GAIBU_RECEIVE_DIR_KK}/KKIFE434/DNSBLOCKING_CNT_YYYYMMDD000000.txt) "
    echo $JOBNAME " File is nonexist(${GAIBU_RECEIVE_DIR_KK}/KKIFE434/DNSBLOCKING_CNT_YYYYMMDD000000.txt) "
    exit ${G_RTN_ERROR}
fi
KKIFE434_CNT=`ls  ${KKIFE434_CNT_LS}`

if [ ! -r ${KKIFE434_FLG_LS} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${GAIBU_RECEIVE_DIR_KK}/KKIFE434/DNSBLOCKING_YYYYMMDD000000.flg) "
    echo $JOBNAME " File is nonexist(${GAIBU_RECEIVE_DIR_KK}/KKIFE434/DNSBLOCKING_YYYYMMDD000000.flg) "
    exit ${G_RTN_ERROR}
fi
KKIFE434_FLG=`ls  ${KKIFE434_FLG_LS}`

#
#--- ファイルの件数チェック
#
DATA_CNT=`wc -l ${KKIFE434_TXT} | awk '{printf $1}'`
FILE_CNT=`cat ${KKIFE434_CNT}`
if [ ${DATA_CNT} -ne ${FILE_CNT} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME "File Data Count Error (${KKIFE434_CNT})DataFile=${DATA_CNT} CountFile=${FILE_CNT}"
    echo $JOBNAME "File Data Count Error (${KKIFE434_CNT})DataFile=${DATA_CNT} CountFile=${FILE_CNT}"
    exit ${G_RTN_ERROR}
fi

#
#--- ブロッキング認証ID情報ファイルからインシデント日が未設定のデータを抽出
#
BSORT_DEF_KK0434_SORT="@NISHO_ID=0.64 @INCIDENT_DATE=1.10 @IP_ADDRESS=2.39 @NISHO_ID_RESON=3.20"
RECLEN_KK0434_SORT=150
bsortex -define ${BSORT_DEF_KK0434_SORT} -sort key="@NISHO_IDasc" -record recform=txtcsv \
  -input file=${KKIFE434_TXT} reclen=${RECLEN_KK0434_SORT} \
   include="(@INCIDENT_DATEasc.eq.'\\"\\"').or.(@INCIDENT_DATEasc.le.' ')" \
  -output file=${KKIFE434_TXT_INC_FALSE} 
#   reconst="@NISHO_ID,@INCIDENT_DATE,@IP_ADDRESS,@NISHO_ID_RESON"

rc=$?
if [ $rc -ne 0 ]
then
    BSORT_ERROR ${rc} ${KKIFE434_TXT}
fi

#
#--- インシデント日が未設定のデータが存在する場合はエラーログに出力
#
WAR=0
FALSE_FILE_CNT=`wc -l ${KKIFE434_TXT_INC_FALSE} | awk '{printf $1}'`
if [ ${FALSE_FILE_CNT} -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00003W $JOBNAME "no incident Date ${KKIFE434_TXT_INC_FALSE}"
    WAR=${G_RTN_WARN}
fi

#
#--- ブロッキング認証ID情報ファイルからインシデント日が設定済のデータを抽出
#
bsortex -define ${BSORT_DEF_KK0434_SORT} -sort key="@NISHO_IDasc,@INCIDENT_DATEasc" -record recform=txtcsv \
  -input file=${KKIFE434_TXT} reclen=${RECLEN_KK0434_SORT} \
   include="@INCIDENT_DATEasc.gt.' '.and.@NISHO_IDasc.gt.' '" \
  -output file=${KKIFE434_TXT_INC_TRUE} \
   reconst="@NISHO_ID,@INCIDENT_DATE"

rc=$?
if [ $rc -ne 0 ]
then
    BSORT_ERROR ${rc} ${KKIFE434_TXT}
fi

#
#--- インシデント日が設定済のデータをマージ（認証IDをキーにカレントレコードのみを残す）
#
BSORT_DEF_KK0434_CUR="@NISHO_ID=0.64 @INCIDENT_DATE=1.10"
RECLEN_KK0434_CUR=80
bsortex -define ${BSORT_DEF_KK0434_CUR} -merge key=@NISHO_IDasc,@INCIDENT_DATEasc -record recform=txtcsv -input file=${KKIFE434_TXT_INC_TRUE} \
    reclen=${RECLEN_KK0434_CUR} -summary suppress last -output file=${LOADFILE}

rc=$?
if [ $rc -ne 0 ]
then
    BSORT_ERROR ${rc} ${KKIFE434_TXT_INC_TRUE}
fi

#
#--- SQL*Loader
#
#コントロールファイルの編集
cp -f ${SQLCONTROL} ${SQLCONTROL_WK}
sed -i -e "s%:OPEDATE%${OPEDATE}%g" ${SQLCONTROL_WK}
sed -i -e "s%:JOBID%${SVC}%g"       ${SQLCONTROL_WK}
sqlldr ${ORACLEUSER}/${ORACLEPASS}@${SID_S},CONTROL=${SQLCONTROL_WK},DATA=${LOADFILE},LOG=${LOG_FILE},BAD=${BAD_FILE}

rc=$?
if [ $rc -ne 0 ]
then
    ERRMSG=" データロードに失敗しました：${LOAD_SCHEMA}($SVC load:rc=$rc) ログを確認してください。ログファイル：${LOG_FILE}、不良ファイル：${BAD_FILE} "
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME ${ERRMSG}
    echo $JOBNAME ${ERRMSG}
    exit ${G_RTN_ERROR}
fi



if [ $rc -eq 0 ]
then
    #
    #--- 一時ファイルの削除
    #
    rm -f ${KKIFE434_TXT_INC_TRUE}
    rm -f ${SQLCONTROL_WK}

    #
    #--- ブロッキング認証ID情報をbkフォルダに退避
    #
    if [ ! -e ${GAIBU_RECEIVE_DIR_KK}/KKIFE434/bk ]
        then
            mkdir ${GAIBU_RECEIVE_DIR_KK}/KKIFE434/bk
    fi
    mv ${KKIFE434_TXT} ${GAIBU_RECEIVE_DIR_KK}/KKIFE434/bk/
    mv ${KKIFE434_CNT} ${GAIBU_RECEIVE_DIR_KK}/KKIFE434/bk/
    mv ${KKIFE434_FLG} ${GAIBU_RECEIVE_DIR_KK}/KKIFE434/bk/
fi

# インシデント日が未設定があればワーニングとする
exit_rc=${WAR}


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

exit $exit_rc
