#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：コンテンツ決済
#
# シェル名      ：０５０電話番号付与処理
#
# 機能          ：ISP請求集計ファイルとして出力したデータのうち、050IP電話アプリのコンテンツサービスデータについては050IP電話アプリの月額基本料と繋がる050電話番号を付与する。その他のコンテンツサービスについては空白を付与する。
#
#(1)汎用項目名が"TELEPHONE_NO"もしくは"N_050APL_DAIHYO_CNKNO"であるコンテンツ契約付加データをアンロードする。
#(2)料金項目コード変換済みISP請求集計ファイルと(1)で出力されたファイルをコンテンツ契約番号で外部結合する。
#(3)コンテンツ契約内訳のカレントデータをアンロードする。
#(4)(2)で出力されたファイルと(3)で出力されたファイルを050アプリ代表コンテンツ契約番号で外部結合する。
#(5)(4)で出力されたファイルについてダブルクォーテーションを空白に置き換え、050電話番号付与済みISP課金ファイルとして出力する。
#(6)(2)で出力されたファイルと(4)で出力されたファイルを削除する。
#※050電話番号付与処理で異常が発生した場合は、ログを出力し、異常終了とする。
#
#※各種ファイル名
#(1)で出力されたファイル：${MID_DIR_CN}/WORK_CNIFM001004_001.csv
#(2)で出力されたファイル：${MID_DIR_CN}/WORK_CNIFM001004_002.csv
#(3)で出力されたファイル：${MID_DIR_CN}/WORK_CNIFM001004_003.csv
#(4)で出力されたファイル：${MID_DIR_CN}/WORK_CNIFM001004_004.csv
#
# コマンド形式  ：EO4030127J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
#
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1
#---運用日の指定がない場合、運用日付を取得する
if [ "${OPD}" = "" ]; then
   . EOK010310J0.sh "NDATE"
   OPD="${RSLT_OPEDATE}"
fi

#
#---業務で必要な変数定義
#
#xxx=xxxxxxx
##############################################################
# 業務処理
##############################################################
sh ${G_TOOLSH}/EOK010210J0.sh CS00025I $JOBNAME

#
#--- アンロード関数
#       p1：テーブル名／クエリファイル名
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}/EOKULD03.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
}

#
#--- クエリ編集
#       p1：ＳＱＬ定義ファイル名
#       p2：バインド変数置換文字
EDIT_MATCHING_QUERY()
{
	MATCHING_FILE=$1
	MATCHING_QUERY_WORK=${ULD_WORK_DIR}/${JOBNAME}_MATCH_QUERY.tmp
	
	cat /dev/null > ${MATCHING_QUERY_WORK}
	
	# SQL定義ファイルの編集
	if [ ! -r ${MATCHING_FILE} ]
	then
		sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${MATCHING_FILE}:rc=$rc) "
		echo $JOBNAME " File is nonexist(${MATCHING_FILE}:rc=$rc) "
		exit ${G_RTN_ERROR}
	fi

	# バインド変数を置き換える
	cat ${MATCHING_FILE} > ${MATCHING_QUERY_WORK}
	
	for bind in $2
	do
		bind_escape=`echo $bind | sed "s/\//\\\\\\\\\//g"`
		sed -i, -e 0,/#FILE#/s/#FILE#/$bind_escape/ ${MATCHING_QUERY_WORK}
	done
	
	export MATCHING_QUERY_WORK
}

#
#--- マッチング処理
#      p1：出力ファイルパス
#      p2：マッチングクエリファイルパス
EXEC_MATCHING()
{
	# 出力ファイルの初期化
	OUTFILE=$1
	cat /dev/null > ${OUTFILE}
	rc=$?
	if [ $rc -ne 0 ]
	then
		sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File cat error(${OUTFILE}:rc=$rc) "
		echo $JOBNAME " File cat error(${OUTFILE}:rc=$rc) "
		exit ${G_RTN_ERROR}
	fi

	# マッチング実行
	export ZTLOUTFILE=${OUTFILE}
	${G_TOOLSH}/util/bin/ZTLMAT01 $2
	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
}

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

P1="OPD=,"
P2="SVCCTL=,"
P3="JOB=EO4030127J0,"
P4="IND1=CNIFM001003.def,"
P5="INF1=${MID_DIR_CN}/CNIFM001003.csv,"
P6="IND2=,"
P7="INF2=,"
P8="OTD1=CNIFM001004.def,"
P9="OTF1=${MID_DIR_CN}/CNIFM001004.csv,"
P10="OTD2=,"
P11="OTF2=,"
P12="TABLENAME=,"
P13="SQLKEY=,"
P14="SQLPARAM=,"
P15="ERRFILE=,"
P16="RECOVERY=,"
P17="BREAKPTN=,"
P18="FREE=${MID_DIR_CN}/CNIFM001003.csv"
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

#
#---各種ファイル
#
# コンテンツ契約付加050アプリ情報ファイル
CN0031_ULD_OUTFILE=${MID_DIR_CN}/WORK_CNIFM001004_001.csv
# 050電話番号付与済みISP課金ワークファイル1
CNIFM001004_WKFILE_1=${MID_DIR_CN}/WORK_CNIFM001004_002.csv
# コンテンツ契約内訳050アプリ情報ファイル
CN0331_ULD_OUTFILE=${MID_DIR_CN}/WORK_CNIFM001004_003.csv
# 050電話番号付与済みISP課金ワークファイル2
CNIFM001004_WKFILE_2=${MID_DIR_CN}/WORK_CNIFM001004_004.csv

#
#---各種アンロードクエリファイル
#
# コンテンツ契約付加(CN_T_CONT_KEI_HUKA)の050アプリ情報
CN0031_ULD_QUERY=${SQL_DIR}/CN_U_CN0031_01.sql
# コンテンツ契約内訳(CN_T_CONT_KEI_UCWK)の050アプリ情報
CN0331_ULD_QUERY=${SQL_DIR}/CN_U_CN0331_01.sql

#
#---各種マッチング定義
#
MATCH_CN0031=${G_TOOLSH}/util/def/CN_CM_0005.def
MATCH_CN0331=${G_TOOLSH}/util/def/CN_CM_0006.def

MATCH_CN0031_TMP=${MID_DIR_CN}/${JOBNAME}.CN_CM_0005_TMP.def
cat /dev/null > ${MATCH_CN0031_TMP}
MATCH_CN0331_TMP=${MID_DIR_CN}/${JOBNAME}.CN_CM_0006_TMP.def
cat /dev/null > ${MATCH_CN0331_TMP}

#
#---コンテンツ契約付加050アプリ情報ファイルの外部結合
#
# コンテンツ契約付加(CN_T_CONT_KEI_HUKA)の050アプリ情報をアンロード
EXEC_UNLOAD ${CN0031_ULD_QUERY} ${CN0031_ULD_OUTFILE}

# 変数を書き換える
sed -e "s/:OPTINM_NO/${line}/g" ${MATCH_CN0031} > ${MATCH_CN0031_TMP}

# マッチング実行
#  - SELECT(reconst)項目は以下
#      0 - -.6   ：課金対象年月
#      1 - -.10    ：ＩＳＰ決済サービス契約番号
#      2 - -.4   ：コンテンツサービスコード
#      3 - -.1   ：税区分
#      4 - -.11    ：料金項目コード
#      5 - -.12    ：課金額
#      6 - -.12   ：売上減額
#      7 - -.12    ：補償費
#      8 - -.12    ：コンテンツ契約番号
#      9 - -.12    ：０５０アプリ代表コンテンツ契約番号
EDIT_MATCHING_QUERY ${MATCH_CN0031_TMP} "${MID_DIR_CN}/CNIFM001003.csv ${CN0031_ULD_OUTFILE}"
EXEC_MATCHING ${CNIFM001004_WKFILE_1} ${MATCHING_QUERY_WORK}

#
#---コンテンツ契約内訳050アプリ情報ファイルの外部結合
#
# コンテンツ契約内訳(CN_T_CONT_KEI_UCWK)の050アプリ情報をアンロード
EXEC_UNLOAD ${CN0331_ULD_QUERY} ${CN0331_ULD_OUTFILE}

# 変数を書き換える
sed -e "s/:OPTINM_NO/${line}/g" ${MATCH_CN0331} > ${MATCH_CN0331_TMP}

# マッチング実行
#  - SELECT(reconst)項目は以下
#      0 - -.6   ：課金対象年月
#      1 - -.10    ：ＩＳＰ決済サービス契約番号
#      2 - -.4   ：コンテンツサービスコード
#      3 - -.1   ：税区分
#      4 - -.11    ：料金項目コード
#      5 - -.12    ：課金額
#      6 - -.12   ：売上減額
#      7 - -.12    ：補償費
#      8 - -.12    ：コンテンツ契約番号
#      9 - -.12    ：０５０アプリ代表コンテンツ契約番号
#      10 - -.12    ：０５０電話番号
EDIT_MATCHING_QUERY ${MATCH_CN0331_TMP} "${CNIFM001004_WKFILE_1} ${CN0331_ULD_OUTFILE}"
EXEC_MATCHING ${CNIFM001004_WKFILE_2} ${MATCHING_QUERY_WORK}

#
#---ダブルクォーテーション置換
#
# マッチング処理で「０５０アプリ代表コンテンツ契約番号」もしくは、「０５０電話番号」が存在しない場合はダブルクォーテーションが設定される為、
# 「０５０アプリ代表コンテンツ契約番号」は12桁の空白、「０５０電話番号」は11桁の空白に置換
sed -e 's/"",/            ,/g' -e 's/""/           /g' ${CNIFM001004_WKFILE_2} > ${MID_DIR_CN}/CNIFM001004.csv

#
#---ワークファイル削除
#
rm -f ${CNIFM001004_WKFILE_1}
rm -f ${CNIFM001004_WKFILE_2}

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

exit ${G_RTN_NORMAL}
