#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：契約管理システム
#
# シェル名      ：コンシューマ有効性結果補正ファイルチェック
#
# 機能          ：ファイルアップロードされた「コンシューマ有効性結果補正アップロードファイル」に対してチェックを行い
#
# コマンド形式  ：EO2180510J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴    ：変更日      変更者            障害／仕様変更No.
# v72.00.00  2024/11/05  GDC)J.Zabala     【ANK-4606-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 "ODATE"
   OPD=${RSLT_OPEDATE}
fi

#
#---アップロード可能期間定義
#
UPLOAD_PSB_PRD_STADAY="05"
UPLOAD_PSB_PRD_ENDDAY="25"
# 2桁までゼロパディング
UPLOAD_PSB_PRD_STADAY=`printf "%02d" ${UPLOAD_PSB_PRD_STADAY}`
UPLOAD_PSB_PRD_ENDDAY=`printf "%02d" ${UPLOAD_PSB_PRD_ENDDAY}`

##############################################################
# 業務処理
##############################################################
sh ${G_TOOLSH}/EOK010210J0.sh CS00025I $JOBNAME

#
#---パラメタ定義
#

#
#--- クエリ編集(アンロード)
#       p1：ＳＱＬ定義ファイル名
#       p2：バインド変数置換文字
EDIT_ULD_QUERY()
{
    SQL_FILE=$1
    SQL_WORK_FILE=${ULD_WORK_DIR}/${JOBNAME}_QUERY.tmp
    cat /dev/null > ${SQL_WORK_FILE}

    # SQL定義ファイルの編集
    if [ ! -r ${SQL_FILE} ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${SQL_FILE}:rc=$rc) "
        echo $JOBNAME " File is nonexist(${SQL_FILE}:rc=$rc) "
        exit ${G_RTN_ERROR}
    fi

    # バインド変数を置き換える
    cat ${SQL_FILE} > ${SQL_WORK_FILE}

    for bind in $2
    do
        sed -i, -e 0,/?/s/?/"'"$bind"'"/ ${SQL_WORK_FILE}
    done

    export SQL_WORK_FILE
}

#
#--- アンロード関数
#       p1：テーブル名／クエリファイル名
#       p2：出力ファイル名
EXEC_UNLOAD()
{
    # 出力ファイルの初期化
    cat /dev/null > $2
    rc=$?
    if [ $rc -ne 0 ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File cat error($2:rc=$rc) "
        echo $JOBNAME " File cat error($2:rc=$rc) "
        exit ${G_RTN_ERROR}
    fi

    # unload
    sh ${G_TOOLSH}/EOKULD02.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
}

#
#---システム日付取得(yyyyMMddHHmmss)
#
. EOK010410J0.sh 2
RSLT_SYS_DATETIME=$RSLT_SYSDATE

#
#--- ファイル定義
#
OUTPUT_FILE=${MID_DIR_KK}/KKIFM970.csv
OUTPUT_BKFILE=${MID_DIR_KK}/KKIFM970_$RSLT_SYS_DATETIME.csv

#
#---バックアップ処理
#
if [ -e ${OUTPUT_FILE} ]
then
    mv -f $OUTPUT_FILE $OUTPUT_BKFILE
fi

# SQLファイル定義
SQLFILE_KK_U_ZM0321_01=${SQL_DIR}/KK_U_ZM0321_02.sql
# 業務パラメータ管理アンロードファイル(マーチャントID)
FILE_ZM0321_1=${MID_DIR_KK}/${JOBNAME}_ZM0321_1.csv
# 業務パラメータ管理アンロードファイル(暗号化鍵・イニシャルベクトル)
FILE_ZM0321_2=${MID_DIR_KK}/${JOBNAME}_ZM0321_2.csv

#
#--- ファイルの初期化を行う
#
cat /dev/null > ${FILE_ZM0321_1}
cat /dev/null > ${FILE_ZM0321_2}

# 業務パラメータ管理をアンロードしてマーチャントIDを取得
WORK_PARAM_ID=PAYGENT_MERCHANT_ID
EDIT_ULD_QUERY ${SQLFILE_KK_U_ZM0321_01} "${WORK_PARAM_ID} ${OPD} ${OPD}"
EXEC_UNLOAD ${SQL_WORK_FILE} ${FILE_ZM0321_1}

# ダブルクォーテーション削除
MERCHANT_ID=`cat ${FILE_ZM0321_1} | sed -e 's/"//g'`

# 9桁までゼロパディング
MERCHANT_ID=`printf "%09d" ${MERCHANT_ID}`

# 業務パラメータ管理をアンロードして暗号化鍵・イニシャルベクトルを取得
WORK_PARAM_ID=PAYGENT_ENC_KEY_IV
EDIT_ULD_QUERY ${SQLFILE_KK_U_ZM0321_01} "${WORK_PARAM_ID} ${OPD} ${OPD}"
EXEC_UNLOAD ${SQL_WORK_FILE} ${FILE_ZM0321_2}

# ダブルクォーテーション削除
ENC_KEY_IV=`cat ${FILE_ZM0321_2} | sed -e 's/"//g'`

# 鍵(カンマ区切りの1項目め)
ENC_KEY=`echo ${ENC_KEY_IV} | awk 'BEGIN {FS = ","} {print $1}'`
# イニシャルベクトル(カンマ区切りの2項目め)
ENC_IV=`echo ${ENC_KEY_IV} | awk 'BEGIN {FS = ","} {print $2}'`

# 有効性依頼ファイル(コンシューマ)ファイル
YK_REQ_FILE_CONS_FILE=${MID_DIR_KK}/${JOBNAME}_YK_REQ_FILE_CONS.csv
cat /dev/null > ${YK_REQ_FILE_CONS_FILE}

# カード情報更新（洗替）要求暗号化ファイル
ENC_CARD_INF_UPD_RQST_FILE=${GAIBU_SEND_DIR_KK}/KKIFE482/bk/fpreq_${MERCHANT_ID}_024_*.enc*

for filename in ${ENC_CARD_INF_UPD_RQST_FILE}
do
    if [ -e $filename ]
    then
        # 最新のファイルを取得する
        ENC_CARD_INF_UPD_RQST_FILE_NEW=`find ${ENC_CARD_INF_UPD_RQST_FILE} | tail -1`
        IN_FILE_NM_NONE_EXT="${ENC_CARD_INF_UPD_RQST_FILE_NEW%.*}"
        # カード情報更新（洗替）要求圧縮ファイル
        ZIP_CARD_INF_UPD_RQST_FILE=${IN_FILE_NM_NONE_EXT}.zip
        rm -f ${ZIP_CARD_INF_UPD_RQST_FILE}
        # カード情報更新（洗替）要求データファイル
        CSV_CARD_INF_UPD_RQST_FILE=${IN_FILE_NM_NONE_EXT}.csv
        rm -f ${CSV_CARD_INF_UPD_RQST_FILE}
        
        # カード情報更新（洗替）要求暗号化ファイルを復号化、解凍する。
        openssl enc -aes-256-cbc -d -in ${ENC_CARD_INF_UPD_RQST_FILE_NEW} -out ${ZIP_CARD_INF_UPD_RQST_FILE} -iv ${ENC_IV} -K ${ENC_KEY}
        
        # ファイル解凍処理
        unzip ${ZIP_CARD_INF_UPD_RQST_FILE} -d ${GAIBU_SEND_DIR_KK}/KKIFE482/bk
        
        # サイトIDが"4211"(コンシューマ)のレコードを取得する
        bsortex -sort key="1.4asc" -record recform=txtcsv -input reclen=1000 omit="0.1asc.eq.'1'.or.0.1asc.eq.'4'" < ${CSV_CARD_INF_UPD_RQST_FILE} \
            -output file=${YK_REQ_FILE_CONS_FILE} include="1.4asc.eq.'4211'" 
        rc=$?
        if [ $rc -ne 0 ]
        then
            sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " SORT Error($SVC sort:rc=$rc) "
            echo $JOBNAME " SORT Error($SVC sort:rc=$rc) "
            exit ${G_RTN_ERROR}
        fi
        
        #次のファイルは処理しない
        break
    fi
done

#
#---パラメタ定義
#

P1="OPD=$OPD,"
P2="SVCCTL=JBSbatUnitServiceControl,"
P3="JOB=EO2180510J0,"
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=${MID_DIR_KK}/;${MID_DIR_KK}/KKIFM970.csv;${YK_REQ_FILE_CONS_FILE};${UPLOAD_PSB_PRD_STADAY};${UPLOAD_PSB_PRD_ENDDAY}"
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

#
#---ＡＰＬ起動
#

java ${JAVA_OPTION} -jar ${JAR_DIR}/koptBatch.jar $PARA

rc=$?
ERR_FLG=0
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 " PROGRAM Error($SVC program:rc=$rc) "
              echo $JOBNAME " PROGRAM Error($SVC program:rc=$rc) "
              exit ${G_RTN_ERROR}
           fi
       fi
    fi
    ERR_FLG=1
fi

exit_rc=$rc

rm -f ${FILE_ZM0321_1}
rm -f ${YK_REQ_FILE_CONS_FILE}
rm -f ${FILE_ZM0321_2}
rm -f ${ZIP_CARD_INF_UPD_RQST_FILE}
rm -f ${CSV_CARD_INF_UPD_RQST_FILE}

#
#--- ジョブの終了メッセージを出力する
#
sh ${G_TOOLSH}/EOK010210J0.sh CS00028I $JOBNAME
sh ${G_TOOLSH}/EOK010210J0.sh CS00026I $JOBNAME

exit $exit_rc
