#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：料金管理
#
# シェル名      ：会計用クレジットデータ抽出
#
# 機能          ：【UIA17_CHPRC00901_クレジット請求データ作成】から出力されるクレジット請求情報ファイルより会計用クレジットデータを作成する。
#
# コマンド形式  ：EO30O2170J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v68.00		 2023/06/27	  FJ)寺田	  【ANK-4268-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 "BDATE"
else
   RSLT_OPEDATE="${OPD}"
fi

#
#---業務で必要な変数定義
#
#---共通ワーク
FILE_WRK1=${MID_DIR_AC}/${JOBNAME}_WK_01

#--- EVENT_CD(イベントコード):"21"(会計処理日（５日実行）)
EVENT_CD="21"

#---スケジュール定義から請求年月（MIN）の当月取得
SQLFILE_CH0501_03=${SQL_DIR}/AC_U_CH0501_03.sql
CSVFILE_CH0501=${MID_DIR_AC}/${JOBNAME}_AC_U_CH0501_WK_1.csv

MATCHKAIKCHG=${LOC_DIR_AC}/${JOBNAME}_KAIKCHG.csv
MATCHKAIKCHG_SPACE=${LOC_DIR_AC}/${JOBNAME}_KAIKCHG_SPACE.csv
OUTPUT_CONT_CRECAR=${MID_DIR_AC}/ACIFM143019.csv
MATCHDEF_KAIKNYUKIN=${G_TOOLSH}/util/def/AC_CM_0198.def

#INPUT_FLIE_クレジット請求情報ファイル
INPUT_FLIE=${MID_DIR_CH}/CHIFM004001.csv

# ファイル（会計内訳変換抽出）
TMP_AC_U_CH0691_05=${LOC_DIR_AC}/${JOBNAME}_TMP_AC_U_CH0691_05.csv
# アンロード出力ファイル（会計内訳変換抽出）
TMP_AC_U_CH0691_05_OUT=${LOC_DIR_AC}/${JOBNAME}_TMP_AC_U_CH0691_05_OUT.csv
#--- アンロードSQL定義ファイル
# 会計内訳変換抽出
AC_U_CH0691_05=${SQL_DIR}/AC_U_CH0691_05.sql


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


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

#
#--- アンロード関数
#       p1：出力ファイル名
#       p2：クエリファイル名
#       p3：バインド変数置換文字
EXEC_UNLOAD()
{
    local _OTF=$1
    local _SQL_FILE=$2
    local _BIND_VAL=$3
    local _SQL_WORK_FILE=${ULD_WORK_DIR}/${JOBNAME}.W_ULD.sql

    # SQLクエリファイル初期化
    cat /dev/null > ${_SQL_WORK_FILE}
    
    # SQL定義ファイルが存在しない場合エラー
    if [ ! -r ${_SQL_FILE} ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${_SQL_FILE}) "
        echo $JOBNAME " File is nonexist(${_SQL_FILE}) "
        exit ${G_RTN_ERROR}
    fi

    cat ${_SQL_FILE} > ${_SQL_WORK_FILE}

    # バインド変数を置き換える
    if [ "${_BIND_VAL}" != "" ]
    then
        for bind in ${_BIND_VAL}
        do
            sed -i -e 0,/?/s/?/"'"$bind"'"/ ${_SQL_WORK_FILE}
        done
    fi

    # 出力ファイルの初期化
    cat /dev/null > ${_OTF}

    # アンロード
    sh ${G_TOOLSH}/EOKULD02.sh ${_SQL_WORK_FILE} ${_OTF}
    rc=$?
    if [ $rc -ne 0 ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " unload error(${_SQL_FILE}:rc=$rc) "
        echo $JOBNAME " unload error(${_SQL_FILE}:rc=$rc) "
        exit ${G_RTN_ERROR}
    fi

    # 一時ファイル削除
    rm -f ${_SQL_WORK_FILE}
}

#
#--- マッチング処理
#      p1：出力ファイルパス
#      p2：マッチングクエリファイルパス
EXEC_MATCHING()
{
    local _OUTFILE=$1
    local _MATCHING_FILE=$2

    # マッチングクエリファイルの存在チェック
    if [ ! -r ${_MATCHING_FILE} ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${_MATCHING_FILE}) "
        echo $JOBNAME " File is nonexist(${_MATCHING_FILE}) "
        exit ${G_RTN_ERROR}
    fi

    # 出力ファイルの初期化
    cat /dev/null > ${_OUTFILE}

    # マッチング実行
    export ZTLOUTFILE=${_OUTFILE}
    ${G_TOOLSH}/util/bin/ZTLMAT01 ${_MATCHING_FILE}
    rc=$?
    if [ $rc -ne 0 ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " matching error($2:rc=$rc) "
        echo $JOBNAME " matching error($2:rc=$rc) "
        exit ${G_RTN_ERROR}
    fi
}

#-------------------------------------------------------------
#--- サブルーチン（SED）
#-------------------------------------------------------------
SED(){
    sed -i -e $1 $2
    rc=$?
    if [ $rc -ne 0 ]
    then
          sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " sed error($1 $2:rc=$rc) "
          echo $JOBNAME " sed error($1 $2:rc=$rc) "
          exit ${G_RTN_ERROR}
    fi
}
#-------------------------------------------------------------
#--- サブルーチン(UNLOAD)
#-------------------------------------------------------------
UNLOAD(){
    sh ${G_TOOLSH}/EOKULD03.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
}

##############################################################
# 初期処理
##############################################################


#--- スケジュール定義CH_M_PRC_SCHDL_TEIGI存在チェック
if [ ! -r ${SQLFILE_CH0501_03} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${SQLFILE_CH0501_03}) "
    echo $JOBNAME " File is nonexist(${SQLFILE_CH0501_03}) "
    exit ${G_RTN_ERROR}
fi

#
#-------------------------------------------------------------
#--- 0.1.請求年月→会計計上月取得処理 (OUTPUT_データ項目No.3)
#-------------------------------------------------------------
cp ${SQLFILE_CH0501_03} ${FILE_WRK1}
SED "s/:EVENT_CD/'${EVENT_CD}'/g" ${FILE_WRK1}
SED "s/:EVENT_YMD/'${RSLT_OPEDATE}'/g" ${FILE_WRK1}
UNLOAD ${FILE_WRK1} ${CSVFILE_CH0501}
KAIK_SUMUP_MONTH=`cat ${CSVFILE_CH0501}`

#
#-------------------------------------------------------------
#--- 0.2.会計計上月の末日取得処理 (OUTPUT_データ項目No.16,17)
#-------------------------------------------------------------

#--- 会計計上月に１日の文字を追加
KAIK_SUMUP_MONTH_STADAY=${KAIK_SUMUP_MONTH}"01"
#--- 翌月へ
NDATE=`date -d "1 month ${KAIK_SUMUP_MONTH_STADAY}" +'%Y%m%d'`
#--- １日前に処理をして会計計上月の月末日を取得
KAIK_SUMUP_MONTH_EDAY=`date -d "1 day ago ${NDATE}" +'%Y%m%d'`

#-------------------------------------------------------------
#--- 0.3.クレジット請求情報ファイルの存在チェック
#-------------------------------------------------------------
#---クレジット請求情報ファイル
if [ ! -r ${INPUT_FLIE} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist($INPUT_FLIE) "
    echo $JOBNAME " File is nonexist($INPUT_FLIE) "
    rm -f ${FILE_WRK1}
    rm -f ${CSVFILE_CH0501}
    exit ${G_RTN_ERROR}
fi

##############################################################
# 1．会計内訳変換系項目の取得（マッチング処理）
##############################################################
#会計内訳変換アンロード
# 引数　出力ファイル名、クエリファイル名、運用日付（YMD）、運用日付（YMD）、運用日付（YMD）、運用日付（YMD）、運用日付（YMD）、運用日付（YMD）
EXEC_UNLOAD ${TMP_AC_U_CH0691_05_OUT} ${AC_U_CH0691_05} "${RSLT_OPEDATE} ${RSLT_OPEDATE} ${RSLT_OPEDATE} ${RSLT_OPEDATE} ${RSLT_OPEDATE} ${RSLT_OPEDATE}"

#会計内訳変換アンロード_出力項目
#00.会計内訳種別コード(OUTPUT_データ項目No.0)
#01.会計内訳種別詳細コード(OUTPUT_データ項目No.1)
#02.会計内訳コード(OUTPUT_データ項目No.4)
#03.入金経路コード(OUTPUT_データ項目No.19)
#04.収納機関コード(OUTPUT_データ項目No.20)
#05.クレジットカード会社コード(OUTPUT_データ項目No.31)

#---クレジット請求情報ファイル
#00.請求契約番号
#01.請求番号
#02.請求年月
#03.売上年月日
#04.クレジットカード番号
#05.請求クレジット会社コード
#06.クレジット交換コード(OUTPUT_データ項目No.31)
#07.請求金額(OUTPUT_データ項目No.11)
#08.消費税額
#09.加盟店番号
#10.オーソリ承認番号
#11.クレジットカード有効期限
#12.決済ID
#13.マーチャント取引ID
#

# 会計内訳変換アンロードをマッチング
# ""ダブルクォート削除
sed -i -e 's/\"//g' ${TMP_AC_U_CH0691_05_OUT}

export INPUT_FLIE
export TMP_AC_U_CH0691_05_OUT
EXEC_MATCHING ${MATCHKAIKCHG} ${MATCHDEF_KAIKNYUKIN}

#マッチング後出力項目
#00.会計内訳変換.会計内訳種別コード
#01.会計内訳変換.会計内訳種別詳細コード
#02.クレジット請求情報ファイル.請求契約番号
#03.会計内訳変換.会計内訳コード
#04.クレジット請求情報ファイル.課金額
#05.クレジット請求情報ファイル.請求番号
#06.会計内訳変換.入金経路コード
#07.会計内訳変換.収納機関コード
#08.会計内訳変換.クレジットカード会社コード

##############################################################
# 2．マッチング後ファイルに空白・文字列を追加
##############################################################
bsortex \
	-copy -record recform=txtcsv  \
	-input reclen=1000 file=${MATCHKAIKCHG} \
	-output file=${MATCHKAIKCHG_SPACE} \
		reconst="0.99,1.99,2.99,'${KAIK_SUMUP_MONTH}'.6asc,3.99,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,'1'.1ascA,4.99,5.99,EMPTY,EMPTY,EMPTY,'${KAIK_SUMUP_MONTH_EDAY}'.8asc,'${KAIK_SUMUP_MONTH_EDAY}'.8asc,EMPTY,6.99,7.99,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,'0'.1ascA,8.99,EMPTY"
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " COPY Error($SVC copy:rc=$rc) "
    echo $JOBNAME " COPY Error($SVC copy:rc=$rc) "
    exit ${G_RTN_ERROR}
fi


##############################################################
# 3．ファイル集計処理
##############################################################
#ソートキー=クレジット請求情報ファイル.請求契約番号、クレジット請求情報ファイル.請求番号、会計内訳変換.会計内訳種別コード、会計内訳変換.会計内訳種別詳細コード、初期処理.会計計上月、会計内訳変換.会計内訳コード、会計内訳変換.クレジットカード会社コード
#集計キー=件数、課金額
bsort -s -z1200 -Tcsv -2.99asca,12.99asca,0.99asca,1.99asca,3.99asca,4.99asca,31.99asca \
-g10.99ascd,11.99ascd \
-o ${OUTPUT_CONT_CRECAR} ${MATCHKAIKCHG_SPACE}
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
# ""ダブルクォート削除
sed -i -e 's/\"//g' ${OUTPUT_CONT_CRECAR}


# 一時ファイルを削除
rm -f ${FILE_WRK1}
rm -f ${CSVFILE_CH0501}
rm -f ${MATCHKAIKCHG}
rm -f ${MATCHKAIKCHG_SPACE}
rm -f ${TMP_AC_U_CH0691_05}
rm -f ${TMP_AC_U_CH0691_05_OUT}
exit_rc=$rc

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

exit $exit_rc
