#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：顧客管理
#
# シェル名      ：キャンペーン自動抽出
#
# 機能          ：キャンペーンを登録する対象のサービス契約番号を、抽出条件と除外条件を指定して抽出し、リストとして出力する。
#                 本バッチは、後続処理のキャンペーン自動登録するための抽出機能である。
#                 現状対応するキャンペーンと抽出条件は以下の通り。
#                 ①あんしん電話パックを申込したサービス契約番号を抽出し、対象の契約者にあんしん電話パック月額料金６カ月間無料キャンペーンが登録済の場合、抽出対象としない。
#
#
# コマンド形式  ：EO2HS0110J0.sh 運用日 CPコード
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v50.00.00       2020/06/23  FJ)澤田      新規作成【ANK-3754-00-00】トビラフォン対応
# v61.00.00       2023/04/24  FJ)舘山      ANK-4315-00-00：【eo定期】 eoホームゲートウェイ導入対応
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

#
#---CP_AUTO_APLY_CD キャンペーンコード
#
CP_AUTO_APLY_CD=$2

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

# アプリケーションプロパティファイル
APL_CONST_PROP=${AUTO_APLY_CP_CHSHT_JGI_PATH}

#
#---アプリケーションプロパティファイルより、ジョブネットから渡された引数を元に抽出ファイルSQLを取得する。
#---(改行も同時に除いておく)
#
CP_CHSHT_SQL=`grep ${CP_AUTO_APLY_CD}"_CHSHT" $APL_CONST_PROP | cut -d "=" -f 2 | sed -e "s/[\r\n]//"`

#
#---アプリケーションプロパティファイルより、ジョブネットから渡された引数を元に除外ファイルSQLを取得する。
#---(改行も同時に除いておく)
#
CP_JGI_SQL=`grep ${CP_AUTO_APLY_CD}"_JGI" $APL_CONST_PROP | cut -d "=" -f 2 | sed -e "s/[\r\n]//"`

#
#---業務で必要な変数定義
#

#
#--- アンロードSQL定義ファイル

# 抽出アンロードファイル(アンロード用)
CP_CHSHT_SQL_ULD=${MID_DIR_KK}/${CP_AUTO_APLY_CD}_CP_CHSHT_SQL.sql

# 除外アンロードファイル(アンロード用)
CP_JGI_SQL_ULD=${MID_DIR_KK}/${CP_AUTO_APLY_CD}_CP_JGI_SQL.sql

# 除外アンロードファイル(アンロード用)ワークファイル
CP_JGI_SQL_WORK_ULD=${MID_DIR_KK}/${CP_AUTO_APLY_CD}_CP_JGI_SQL_WORK_ULD.sql

#
#--- 一時ファイル
# 抽出アンロード結果ファイル
TMPFILE_CP_CHSHT_ULD_FILE=${MID_DIR_KK}/${CP_AUTO_APLY_CD}_TMPFILE_CP_CHSHT_ULD_FILE.csv

# サービス契約番号のみ抽出アンロード結果ファイル
TMPFILE_SVC_KEI_NO_CP_CHSHT_ULD_FILE=${MID_DIR_KK}/${CP_AUTO_APLY_CD}_TMPFILE_SVC_KEI_NO_CP_CHSHT_ULD_FILE.csv

# サービス契約番号のみ抽出アンロード結果ソートファイル
TMPFILE_SVC_KEI_NO_CP_CHSHT_ULD_SORT_FILE=${MID_DIR_KK}/${CP_AUTO_APLY_CD}_TMPFILE_SVC_KEI_NO_CP_CHSHT_ULD_SORT_FILE.csv

# サービス契約番号のみリストファイル
TMPFILE_SVC_KEI_NO_LIST_FILE=${MID_DIR_KK}/${CP_AUTO_APLY_CD}_TMPFILE_SVC_KEI_NO_LIST_FILE.csv

# 除外アンロード結果ファイル
TMPFILE_CP_JGI_ULD_FILE=${MID_DIR_KK}/${CP_AUTO_APLY_CD}_TMPFILE_CP_JGI_ULD_FILE.csv

# 除外アンロード結果ワークファイル
TMPFILE_WORK_CP_JGI_ULD_FILE=${MID_DIR_KK}/${CP_AUTO_APLY_CD}_TMPFILE_WORK_CP_JGI_ULD_FILE.csv

#
#--- マッチングツール定義ファイル
#
MATCHDEFFILE1=${G_TOOLSH}/util/def/KK_CM_0725.def

#
#--- # マッチング結果ファイル
#
MATCHING_FILE1=${MID_DIR_KK}/${CP_AUTO_APLY_CD}_KKCM725001.csv

#
#--- # ワークキャンペーン登録リストファイル
#
TMPFILE_CPKKIFM912_FILE=${MID_DIR_KK}/${CP_AUTO_APLY_CD}_TMPFILE_CPKKIFM912_FILE.csv

#
#--- # キャンペーン登録リストファイル
#
KKIFM912_FILE=${MID_DIR_KK}/${CP_AUTO_APLY_CD}_KKIFM912_FILE.csv


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

#
#--- マッチング処理
#      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
}

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

rc=0

#キャンペーン登録ファイルを空で作成する。
cat /dev/null > ${KKIFM912_FILE}

#
#---抽出アンロードファイルをコピーし、抽出アンロードファイル(アンロード用)とする
#
cp -f ${SQL_DIR}/$CP_CHSHT_SQL $CP_CHSHT_SQL_ULD

#
#---抽出アンロードファイル(アンロード用)の検索文字列を置き換える　運用日
#
sed -i -e "s/:UNYO_YMD/$RSLT_OPEDATE/" $CP_CHSHT_SQL_ULD

#
#---アンロード(抽出)
#
sh ${G_TOOLSH}/EOKULD02.sh $CP_CHSHT_SQL_ULD $TMPFILE_CP_CHSHT_ULD_FILE

rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " UNLOAD Error($SVC unload:rc=$rc) " 
    echo $JOBNAME " UNLOAD Error($SVC unload:rc=$rc) "
    exit ${G_RTN_ERROR}
fi

#
#---アンロード(抽出)の件数が0件の場合、処理終了
#
filesize=`cat $TMPFILE_CP_CHSHT_ULD_FILE | wc -l`
if [ ${filesize} -eq 0 ]
then
	sh ${G_TOOLSH}/EOK010210J0.sh CS00028I $JOBNAME
	sh ${G_TOOLSH}/EOK010210J0.sh CS00026I $JOBNAME
	#キャンペーン登録ファイルを空で作成する。
#	cat /dev/null > ${TMPFILE_CPKKIFM912_FILE}
	exit ${G_RTN_NORMAL}
fi

#抽出アンロードファイルのソートする。
bsortex -sort key=0.10asc -record recform=txtcsv -input file=${TMPFILE_CP_CHSHT_ULD_FILE} reclen=40 -output file=${TMPFILE_SVC_KEI_NO_CP_CHSHT_ULD_SORT_FILE}

#SVC_KEI_NO単位のみ抽出する。
bsortex -merge key=0.10asc -record recform=txtcsv -input file=${TMPFILE_SVC_KEI_NO_CP_CHSHT_ULD_SORT_FILE} reconst="0.10" reclen=40 -summary suppress first -output file=${TMPFILE_SVC_KEI_NO_CP_CHSHT_ULD_FILE}

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

#
##### サービス契約番号を1000単位で１行に集約する。（検索キー）
#
cat /dev/null > ${TMPFILE_SVC_KEI_NO_LIST_FILE}

ROWS=`wc -l ${TMPFILE_SVC_KEI_NO_CP_CHSHT_ULD_FILE} | cut -d " " -f 1`
awk -F, 'gsub("\"", "'"'"'") {if(NR%1000 == 0 || NR == '${ROWS}'){ORS="\n";}else{ORS=",";} print $1}' ${TMPFILE_SVC_KEI_NO_CP_CHSHT_ULD_FILE} > ${TMPFILE_SVC_KEI_NO_LIST_FILE}

rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " AWK error(input file=${TMPFILE_SVC_KEI_NO_CP_CHSHT_ULD_FILE}=$rc) "
    echo $JOBNAME " AWK error(input file=${TMPFILE_SVC_KEI_NO_CP_CHSHT_ULD_FILE}=$rc) "
    exit ${G_RTN_ERROR}
fi

#
#---除外アンロードファイルをコピーし、除外アンロードファイル(アンロード用)とする
#
cp -f ${SQL_DIR}/$CP_JGI_SQL $CP_JGI_SQL_ULD

#
##### 集約したサービス契約番号毎に、除外SQLをアンロードを実行し、アンロード用メインファイルに追記する。
#

# アンロード用メインのファイルを空にする
cat /dev/null > ${TMPFILE_CP_JGI_ULD_FILE}

for PARAMS in `cat ${TMPFILE_SVC_KEI_NO_LIST_FILE}`
do
    # SQLの条件を保管してファイルをワークにコピー
    cat ${CP_JGI_SQL_ULD} | sed s/\?/${PARAMS}/ > ${CP_JGI_SQL_WORK_ULD}
    
    #
    #除外アンロードファイル(アンロード用)の検索文字列を置き換える　運用日
    #
    sed -i -e "s/:UNYO_YMD/$RSLT_OPEDATE/" $CP_JGI_SQL_WORK_ULD

    # アンロード結果ファイルを念のためにする
    cat /dev/null > ${TMPFILE_WORK_CP_JGI_ULD_FILE}
    
    # アンロード呼出し
    sh ${G_TOOLSH}/EOKULD02.sh ${CP_JGI_SQL_WORK_ULD} ${TMPFILE_WORK_CP_JGI_ULD_FILE}

    rc=$?
    if [ $rc -ne 0 ]
    then
        UNLOAD_ERROR $rc ${CP_JGI_SQL_WORK_ULD}
    fi

    # アンロード用メインファイルへアンロード結果を追記
    cat ${TMPFILE_WORK_CP_JGI_ULD_FILE} >> ${TMPFILE_CP_JGI_ULD_FILE}
done

#
# --- マッチング１ 
#
# アンロードをマッチング
export TMPFILE_CP_CHSHT_ULD_FILE
export TMPFILE_CP_JGI_ULD_FILE
#---マッチング処理でLeftjoinがNULL時に"を付けなくする（マッチング使用時は必須）
export ZTLQUOTES=''
EXEC_MATCHING ${MATCHING_FILE1} ${MATCHDEFFILE1}

cat /dev/null > ${TMPFILE_CPKKIFM912_FILE}

#抽出ファイルと除外ファイルのマッチングの結果で、除外ファイルに含まれていないサービス契約番号が変更されたサービス契約番号を抽出する。
# ANK-4315-00-00 Modify START
#bsortex -sort key=0.10asc -record recform=txtcsv -input file=${MATCHING_FILE1} include="3.10asc.lt.' '" reclen=40 -output file=${TMPFILE_CPKKIFM912_FILE} reconst="0.10,1.9,2.8"
bsortex -sort key=0.10asc -record recform=txtcsv -input file=${MATCHING_FILE1} include="4.10asc.lt.' '" reclen=50 -output file=${TMPFILE_CPKKIFM912_FILE} reconst="0.10,1.9,2.8,3.1"
# ANK-4315-00-00 Modify END

#お客様単位でマージする。
bsortex -merge key=0.10asc -record recform=txtcsv -input file=${TMPFILE_CPKKIFM912_FILE} reclen=40 -summary suppress first -output file=${KKIFM912_FILE}


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

# 一時ファイル削除
rm -f ${CP_CHSHT_SQL_ULD}
rm -f ${CP_JGI_SQL_ULD}
rm -f ${CP_JGI_SQL_WORK_ULD}
rm -f ${TMPFILE_CP_CHSHT_ULD_FILE}
rm -f ${TMPFILE_SVC_KEI_NO_CP_CHSHT_ULD_FILE}
rm -f ${TMPFILE_SVC_KEI_NO_LIST_FILE}
rm -f ${TMPFILE_CP_JGI_ULD_FILE}
rm -f ${MATCHING_FILE1}
rm -f ${TMPFILE_CPKKIFM912_FILE}
rm -f ${TMPFILE_SVC_KEI_NO_CP_CHSHT_ULD_SORT_FILE}
rm -f ${TMPFILE_WORK_CP_JGI_ULD_FILE}

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

exit $rc
