#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：契約管理
#
# シェル名      ：eo電気申込途中離脱データ抽出
#
# 機能          ：一定期間のWEB(一般・量販・訪販)申込のうち、eo電気申込意思有でeo電気申込実績なしのデータを抽出する。
#
# コマンド形式  ：EO2FZ0110J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v29.00.00      2016/10/07   FJ）藤本     【ANK-2990-00-00】【eo電気】同時申込・量販訪販対応（STEP2-2）
# 
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

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

#
#--- アンロード関数
#       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}
}

#
#--- アンロード関数2
#    ・置換文字列のシングルクォートなし
#    ・バインド変数置換文字の空白を区切り文字としない
#       p1：出力ファイル名
#       p2：クエリファイル名
#       p3：バインド変数置換文字
EXEC_UNLOAD2()
{
    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

    # バインド変数を置き換える
    if [ "${_BIND_VAL}" != "" ]
    then
        sed -e s/?/"${_BIND_VAL}"/ ${_SQL_FILE} > ${_SQL_WORK_FILE}
    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
}

#
#--- 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}
}

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

#
#--- 1. バッチ運用日を取得する
#

if [ "${OPD}" = "" ]; then
    . EOK010310J0.sh "BDATE"
    OPD=${RSLT_OPEDATE}
fi

#
#--- 2. シェル変数定義
#

#--- アンロードSQL定義ファイル
# 業務パラメータ管理アンロードSQL定義ファイル
ULDSQL_ZM0321=${SQL_DIR}/KK_U_ZM0321_09.sql
# 申込アンロードSQL定義ファイル
ULDSQL_KK0011=${SQL_DIR}/KK_U_KK0011_02.sql

#--- マッチングツール定義ファイル
# マッチングツール定義ファイル(申込－お客様)
MATCHDEF_KK0011=${G_TOOLSH}/util/def/KK_CM_0605.def

#--- 共通アンロードファイル
# お客様共通アンロードファイル<カレント>
COMULD2_CK0011_CUR=${MID_DIR_CC}/CCIFM019002.csv

#--- 一時ファイル
# 業務パラメータ管理アンロードファイル
ULDFILE_ZM0321=${LOC_DIR_KK}/${JOBNAME}_ZM0321.csv
# 申込アンロードファイル
ULDFILE_KK0011=${LOC_DIR_KK}/${JOBNAME}_KK0011.csv
# お客様抽出結果ファイル
TMPFILE_CK0011=${LOC_DIR_KK}/${JOBNAME}_CK0011.csv
# 申込マッチング結果ファイル
TMPFILE_KK0011_MATCH=${LOC_DIR_KK}/${JOBNAME}_KK0011_MATCH.csv
# 申込マッチング結果ファイルのレコード長
RECLEN_KK0011_MATCH=670
# eo電気申込途中離脱データ一時ファイル
TMPFILE_KKIFM719=${LOC_DIR_KK}/${JOBNAME}_KKIFM719001.csv

#--- 出力ファイル
# eo電気申込途中離脱データファイル
OUTFILE_KKIFM719=${MID_DIR_KK}/KKIFM719001.csv
# eo電気申込途中離脱データファイルのヘッダー行
HEADER_KKIFM719='"申込チャネル","申込区分","申込年月日","受付番号","SYSID","契約者氏名","契約者氏名(カナ)","契約者電話番号"'

#
#--- 3. 申込のアンロード処理を実行する
#

# ① 業務パラメータ管理から、eo電気申込途中離脱データ抽出期間を取得する
EXEC_UNLOAD ${ULDFILE_ZM0321} ${ULDSQL_ZM0321} "${OPD} ${OPD}"
EXTRACT_PERIOD=`cat ${ULDFILE_ZM0321} | sed -e 's/"//g'`

# ② 申込・申込明細から、①で取得したeo電気申込途中離脱データ抽出期間のデータを取得する
# 申込年月日の条件部を作成
START_DATE=`date -d "${OPD} ${EXTRACT_PERIOD} day ago 1 day" '+%Y%m%d'`   # 抽出開始日：バッチ運用日－eo電気申込途中離脱データ抽出期間＋1日
END_DATE=${OPD}                                                           # 抽出終了日：バッチ運用日
for (( WORK_DATE=${START_DATE}; ${WORK_DATE} <= ${END_DATE}; WORK_DATE=`date -d "${WORK_DATE} 1 day" '+%Y%m%d'`)); do
    if [ "${ULDSQL_KK0011_PARAM}" != "" ]; then
        ULDSQL_KK0011_PARAM="${ULDSQL_KK0011_PARAM} OR "
    fi
    ULDSQL_KK0011_PARAM="${ULDSQL_KK0011_PARAM}KK0011.MSKM_YMD = '${WORK_DATE}'"
done

EXEC_UNLOAD2 ${ULDFILE_KK0011} ${ULDSQL_KK0011} "${ULDSQL_KK0011_PARAM}"

#
#--- 4. 申込アンロードファイルとお客様共通アンロードファイルのマッチング処理を実行する
#

# ① お客様アンロードファイルから必要項目のみを抽出する
BSORT_DEF_CK0011="@SYSID=0.10 @CUST_NM=4.242 @CUST_KANA=5.242 @KEISHA_TELNO=17.11"
bsortex -define ${BSORT_DEF_CK0011} -copy -record recform=txtcsv \
    -input file=${COMULD2_CK0011_CUR} reclen=${ULD2_REC_LEN_CK0011} reconst="@SYSID,@CUST_NM,@CUST_KANA,@KEISHA_TELNO" \
    -output file=${TMPFILE_CK0011}
rc=$?
if [ $rc -ne 0 ]
then
    BSORT_ERROR ${rc} ${COMULD2_CK0011_CUR}
fi

# ② 申込アンロードファイルと、①で出力したファイルのマッチング処理を行う
export ULDFILE_KK0011
export TMPFILE_CK0011
export ZTLOUTFILE=${TMPFILE_KK0011_MATCH}
${G_TOOLSH}/util/bin/ZTLMAT01 ${MATCHDEF_KK0011}

#
#--- 5. eo電気申込途中離脱データファイルを出力する
#

# ① 申込年月日(昇順)、申込形態コード(昇順)、申込書番号(昇順)の順にソートする
BSORT_DEF_KKIFM719="@MSKM_CHANNEL=0.60 @MSKM_KBN=1.60 @MSKM_YMD_FMT=2.10 @MSKMSHO_NO=3.10 @SYSID=4.10 @CUST_NM=5.242 @CUST_KANA=6.242 @KEISHA_TELNO=7.11 @MSKM_FORM_CD=8.2 @MSKM_YMD=9.8"
bsortex -define ${BSORT_DEF_KKIFM719} -sort key="@MSKM_YMDasca,@MSKM_FORM_CDasca,@MSKMSHO_NOasca" -record recform=txtcsv \
    -input file=${TMPFILE_KK0011_MATCH} reclen=${RECLEN_KK0011_MATCH} \
    -output file=${TMPFILE_KKIFM719} \
                reconst="@MSKM_CHANNEL,@MSKM_KBN,@MSKM_YMD_FMT,@MSKMSHO_NO,@SYSID,@CUST_NM,@CUST_KANA,@KEISHA_TELNO"
rc=$?
if [ $rc -ne 0 ]
then
    BSORT_ERROR ${rc} ${TMPFILE_KK0011_MATCH}
fi

# ② ①で出力したファイルの1行目にヘッダー行を挿入、文字コードをShift_JIS、改行コードをCRLFに変換する
echo ${HEADER_KKIFM719} | cat - ${TMPFILE_KKIFM719} | nkf -x -s -Lw > ${OUTFILE_KKIFM719}

# 一時ファイル削除
rm -f ${ULDFILE_ZM0321}
rm -f ${ULDFILE_KK0011}
rm -f ${TMPFILE_CK0011}
rm -f ${TMPFILE_KK0011_MATCH}
rm -f ${TMPFILE_KKIFM719}

# Javaプログラム開始(Program_Start)
sh ${G_TOOLSH}/EOK010210J0.sh CS00027I $JOBNAME

# Javaプログラム終了(Program_End)
sh ${G_TOOLSH}/EOK010210J0.sh CS00028I $JOBNAME

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

exit ${G_RTN_NORMAL}
