#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：請求収納
#
# シェル名      ：圧縮／暗号化（オーソリ無）
#
# 機能          ：1.圧縮／暗号化（オーソリ無）
#
#(１)
#「クレジット請求依頼データ送信（オーソリ無）データ」を圧縮/暗号化する。
#
# コマンド形式  ：EO60B0180J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v58.00.00       2022/05/12  FJ）吉田     【ANK-3846-00-00】【クレカ】クリアパス→ペイジェント移行
# v58.00.01       2022/07/01  FJ) 吉田     【IT1-2022-0000038】ヘッダ部とフッタ部の改行コードがデータ部と異なる。
# 
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

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

SYSDATE_YYYYMMDD=`date '+%Y%m%d'`
#
#---業務で必要な変数定義
#
WK_RM=true
##############################################################
# 業務処理
##############################################################
sh ${G_TOOLSH}/EOK010210J0.sh CS00025I $JOBNAME

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

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


##############################################################
#
#--- 共通サブルーチン
#
##############################################################
##############################################################
#--- UNLOAD
##############################################################
UNLOAD(){
    sh ${G_TOOLSH}/EOKULD02.sh $1 $2
    rc=$?
    if [ $rc -ne 0 ]
    then
          sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " unload error($1:rc=$rc) "
          echo $JOBNAME " unload error($1:rc=$rc) "
          exit ${G_RTN_ERROR}
    fi
}


#
#-------------------------ファイル定義（入力・作業）-----------------------------------------
#
#クレジット請求依頼データ送信（オーソリ無）データマージ後
INPUT_FILE_1=${MID_DIR_CH}/CHIFM410008.csv
# 業務パラメータ管理取得処理
ZM_M_WORK_PARAM_KNRI_ULD=${SQL_DIR}/CH_U_ZM0321_01.sql

# マーチャントID
PAYGENT_MERCHANT_ID=""
# 暗号化複合化用鍵
PAYGENT_ENC_KEY=""
# イニシャルベクトル
PAYGENT_ENC_IV=""

# 業務パラメータID:ペイジェント向けマーチャントID
WORK_PARAM_ID_PAYGENT_MERCHANT_ID="PAYGENT_MERCHANT_ID"
ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_MERCHANT_ID=${LOC_DIR_CH}/AC_U_ZM0321_01_TEMP_${JOBNAME}_PAYGENT_MERCHANT_ID.sql
ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_MERCHANT_ID_FILE=${LOC_DIR_CH}/${JOBNAME}_AC_U_ZM0321_01_PAYGENT_MERCHANT_ID.csv

# 業務パラメータID:ペイジェント向け暗号化複合化用鍵、イニシャルベクトル
WORK_PARAM_ID_PAYGENT_ENC_KEY_IV="PAYGENT_ENC_KEY_IV"
ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_ENC_KEY_IV=${LOC_DIR_CH}/AC_U_ZM0321_01_TEMP_${JOBNAME}_PAYGENT_ENC_KEY_IV.sql
ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_ENC_KEY_IV_FILE=${LOC_DIR_CH}/${JOBNAME}_AC_U_ZM0321_01_PAYGENT_ENC_KEY_IV.csv

# 通番管理ファイル
SEQ_AUTHORI_ARI_FILE=${LOC_DIR_CH}/${JOBNAME}_SEQ_AUTHORI_NASHI.csv


#
#-------------------------主処理----------------------------------------------
#
#--- クレジット請求依頼データ送信（オーソリ有）データ_マージ後
if [ ! -r ${INPUT_FILE_1} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${INPUT_FILE_1}) "
    echo $JOBNAME " File is nonexist(${INPUT_FILE_1}) "
    exit ${G_RTN_ERROR}
fi

#
#-------------------------------------------------------------
#---業務パラメータ管理取得処理
#-------------------------------------------------------------
#---業務パラメータ管理アンロード
#
# ペイジェント向けマーチャントIDを業務パラメータ管理から取得する。
# １．業務パラメータを設定
# ２．業務パラメータ適用開始年月日に運用日を設定
# ３．業務パラメータ適用終了年月日に運用日を設定
cp  -f ${ZM_M_WORK_PARAM_KNRI_ULD} ${ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_MERCHANT_ID}
sed -i -e s@':WORK_PARAM'@${WORK_PARAM_ID_PAYGENT_MERCHANT_ID}@g         ${ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_MERCHANT_ID}
sed -i -e s@:OPE_DATE@${RSLT_OPEDATE}@g                                  ${ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_MERCHANT_ID}
sed -i -e s@:OPE_DATE@${RSLT_OPEDATE}@g                                  ${ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_MERCHANT_ID}

#--- 業務パラメータ管理SQL実行結果を格納
UNLOAD ${ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_MERCHANT_ID} ${ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_MERCHANT_ID_FILE}


# ペイジェント向け暗号化複合化用鍵、イニシャルベクトルを業務パラメータ管理から取得する。
# １．業務パラメータを設定
# ２．業務パラメータ適用開始年月日に運用日を設定
# ３．業務パラメータ適用終了年月日に運用日を設定
cp  -f ${ZM_M_WORK_PARAM_KNRI_ULD} ${ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_ENC_KEY_IV}
sed -i -e s@':WORK_PARAM'@${WORK_PARAM_ID_PAYGENT_ENC_KEY_IV}@g          ${ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_ENC_KEY_IV}
sed -i -e s@:OPE_DATE@${RSLT_OPEDATE}@g                                  ${ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_ENC_KEY_IV}
sed -i -e s@:OPE_DATE@${RSLT_OPEDATE}@g                                  ${ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_ENC_KEY_IV}

#--- 業務パラメータ管理SQL実行結果を格納
UNLOAD ${ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_ENC_KEY_IV} ${ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_ENC_KEY_IV_FILE}


#----設定値取得
PAYGENT_MERCHANT_ID=`cat ${ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_MERCHANT_ID_FILE}|awk -F, '{print $1}'|sed 's/"//g'`
PAYGENT_ENC_KEY=`cat ${ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_ENC_KEY_IV_FILE}|awk -F, '{print $1}'|sed 's/"//g'`
PAYGENT_ENC_IV=`cat ${ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_ENC_KEY_IV_FILE}|awk -F, '{print $2}'|sed 's/"//g'`

#----エラーチェック
# 業務パラメータが存在しなかった場合はエラー
if [ "$PAYGENT_MERCHANT_ID" = "" ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " workParam error(PAYGENT_MERCHANT_ID:rc=$rc) "
    echo $JOBNAME " workParam error(PAYGENT_MERCHANT_ID) "
    exit ${G_RTN_ERROR}
fi
# 業務パラメータが存在しなかった場合はエラー
if [ "$PAYGENT_ENC_KEY" = "" ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " workParam error(PAYGENT_ENC_KEY_IV=$rc) "
    echo $JOBNAME " workParam error(PAYGENT_ENC_KEY) "
    exit ${G_RTN_ERROR}
fi
# 業務パラメータが存在しなかった場合はエラー
if [ "$PAYGENT_ENC_IV" = "" ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " workParam error(PAYGENT_ENC_KEY_IV:rc=$rc) "
    echo $JOBNAME " workParam error(PAYGENT_ENC_IV) "
    exit ${G_RTN_ERROR}
fi


# 取得したマーチャントIDをゼロパディングする
PAYGENT_MERCHANT_ID_PAD=`printf "%09d" "${PAYGENT_MERCHANT_ID}"`

#
# ---通番取得処理---
#
SEND_YMD=""
SEQ_NO=""


# １．通番管理ファイルの存在チェック
if [ -r ${SEQ_AUTHORI_ARI_FILE} ]
then
    # ファイルが存在すれば、中身を読み込む
    SEND_YMD=`cat ${SEQ_AUTHORI_ARI_FILE}|awk -F, '{print $1}'`
    # 通番管理ファイル内の送信日付とシステム日付が同じかチェック
    if [ $((SEND_YMD)) -eq $((SYSDATE_YYYYMMDD)) ]
    then
        # 送信日付が同じなら登録された通番に+1して使用する
        SEQ_NO=$((`cat ${SEQ_AUTHORI_ARI_FILE}|awk -F, '{print $2}'|sed 's/0*\([0-9*0-9]$\)/\1/g'`+1))
    elif [ $((SEND_YMD)) -lt $((SYSDATE_YYYYMMDD)) ]
    then
        # ファイルが存在しなければ、新規採番する。
        # 送信日付が過去なら連番を1から採番しなおす
        SEQ_NO=1
        SEND_YMD=${SYSDATE_YYYYMMDD}
    else 
        # 送信日付が未来なら異常終了
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " workParam error($1:rc=$rc) "
        echo $JOBNAME " SEND_YMD error($1:rc=$rc) "
        exit ${G_RTN_ERROR}
    fi
else
    # ファイルが存在しなければ、新規採番する。
    # 送信日付が過去なら連番を1から採番しなおす
    SEQ_NO=1
    SEND_YMD=${SYSDATE_YYYYMMDD}
fi

# 通番管理ファイル更新処理
SEQ_NO_PAD=`printf "%05d" "${SEQ_NO}"`
echo "${SEND_YMD},${SEQ_NO_PAD}" > ${SEQ_AUTHORI_ARI_FILE}

#
#-------------------------ファイル出力処理----------------------------------------------
#
#
#----ファイル名生成-----
#
# 業務パラメータ管理から取得したマーチャントIDと、
# 通番管理ファイルから取得した通番を利用して送信ファイル名を決定する。
SEND_FILE_NAME=fpreq_${PAYGENT_MERCHANT_ID_PAD}_023_${SYSDATE_YYYYMMDD}_${SEQ_NO_PAD}

# CSVファイル
SEND_FILE_CSV=${MID_DIR_CH}/${SEND_FILE_NAME}.csv
# ZIPファイル
SEND_FILE_ZIP=${MID_DIR_CH}/${SEND_FILE_NAME}.zip
# 暗号ファイル
SEND_FILE_ENC=${GAIBU_SEND_DIR_CH}/CHIFE097/${SEND_FILE_NAME}.enc
# フラグファイル
SEND_FILE_FLG=${GAIBU_SEND_DIR_CH}/CHIFE097/${SEND_FILE_NAME}.flg


#
#----データファイル作成-----
#
# 入力ファイルにヘッダとフッダを付与してデータファイルを作成する。
DATA_CNT=`wc -l ${INPUT_FILE_1} | awk '{printf $1}'`
HEADER1="1,023,${PAYGENT_MERCHANT_ID},,,,,,"
FUTTER1="4,${DATA_CNT},,"


cat /dev/null >${SEND_FILE_CSV}
# V58.00.01 IT1-2022-0000038 MOD START
#echo ${HEADER1} >> ${SEND_FILE_CSV}
#cat ${INPUT_FILE_1} >> ${SEND_FILE_CSV}
#echo ${FUTTER1} >> ${SEND_FILE_CSV}
echo -e ${HEADER1} | nkf -s -Lw --overwrite >> ${SEND_FILE_CSV}
cat ${INPUT_FILE_1} >> ${SEND_FILE_CSV}
echo -e ${FUTTER1} | nkf -s -Lw --overwrite >> ${SEND_FILE_CSV}
# V58.00.01 IT1-2022-0000038 MOD END


#
#----圧縮-----
#
# 入力ファイルを圧縮する。
zip -j ${SEND_FILE_ZIP} ${SEND_FILE_CSV}

#
#----暗号化-----
#
# 圧縮ファイルを暗号化する。
openssl enc -aes-256-cbc -e -in ${SEND_FILE_ZIP} -out ${SEND_FILE_ENC} -iv ${PAYGENT_ENC_IV} -K ${PAYGENT_ENC_KEY}

#
#----フラグファイル作成
#
touch ${SEND_FILE_FLG}

# ワーク削除
if [ ${WK_RM} = "true" ] ;then
    rm ${ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_MERCHANT_ID}
    rm ${ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_MERCHANT_ID_FILE}
    rm ${ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_ENC_KEY_IV}
    rm ${ZM_M_WORK_PARAM_KNRI_ULD_PAYGENT_ENC_KEY_IV_FILE}
    rm ${SEND_FILE_ZIP}
    rm ${SEND_FILE_CSV}
fi


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

exit ${G_RTN_NORMAL}
