#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：契約管理
#
# シェル名      ：テレビオプション視聴実績作成
#
# 機能          ：KKW12101_有料視聴者一覧で参照するテレビオプション視聴実績のデータを作成する。
#バッチ運用日の前月から過去3か月間をデータの保存期間とし、実行時に不要なデータの削除も実施する
#
# コマンド形式  ：EO2DK0110J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
#
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

##############################################################
# 業務処理
##############################################################
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(KK_T_CRECARD)
	sh ${G_TOOLSH}/EOKULD02.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_ULD_QUERY()
{
	SQL_FILE=$1
	SQL_WORK_FILE=${ULD_WORK_DIR}/${JOBNAME}_QUERY.tmp
	cat /dev/null > ${SQL_WORK_FILE}
	
	# SQL定義ファイルの編集
	if [ ! -r ${SQL_FILE} ]
	then
		sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${SQL_FILE}:rc=$rc) "
		echo $JOBNAME " File is nonexist(${SQL_FILE}:rc=$rc) "
		exit ${G_RTN_ERROR}
	fi

	# バインド変数を置き換える
	cat ${SQL_FILE} > ${SQL_WORK_FILE}
	
	for bind in $2
	do
		sed -i, -e 0,/?/s/?/"'"$bind"'"/ ${SQL_WORK_FILE}
	done
	
	export SQL_WORK_FILE
}

#
#--- クエリ編集
#       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
}

#
#--- 最小ファイルサイズ取得
#       1：最小ファイルサイズが0よりも大きい
#       0：最小ファイルサイズが0
#
GET_MIN_FILESIZE()
{

	MINSIZE=-1
	for bind in $1
	do
		filesize=`cat ${bind} | wc -l`
		
		if [ ${MINSIZE} -eq -1 ]
		then
			MINSIZE=${filesize}
		else
			if [ ${filesize} -lt ${MINSIZE} ]
			then
				MINSIZE=${filesize}
			fi
		fi
	done
	
	if [ ${MINSIZE} -gt 0 ]
	then
		return 1
	else
		return 0
	fi

}

# バッチ運用日の取得
. EOK010310J0.sh "BDATE"

BDATE_ERROR='0'
if [ "${RSLT_OPEDATE}" = "" ];then
	BDATE_ERROR='1'
fi

# データ保存開始月（バッチ運用日の前月）、
# データ保存終了月（４ヶ月前の年月を算出）の取得
SAVE_END_MNTH=''
SAVE_STT_MNTH=''

# 集計対象年月、集計開始年月日、集計終了年月日の取得
SH_TG_MNTH=''
SH_STT_MNTH=''
SH_END_MNTH=''

if [ "${BDATE_ERROR}" = "0" ];then


	SAVE_END_MNTH=`date -d "1 months ago ${RSLT_OPEDATE}" +%Y%m`
	SAVE_STT_MNTH=`date -d "4 months ago ${RSLT_OPEDATE}" +%Y%m`

	echo '■バッチ運用日------------------------>'${RSLT_OPEDATE}
	echo '■データ保存開始月（SAVE_STT_MNTH）--->'${SAVE_STT_MNTH}
	echo '■データ保存終了月（SAVE_END_MNTH）--->'${SAVE_END_MNTH}

	# パラメータチェックエラーフラグ
	PRAM_ERROR='0'

	# パラメタ年月が指定されていない場合は、
	# またはパラメタ年月とバッチ運用日が同じ値である場合
	# データ保存終了月を集計対象年月とする。
	if [ "${OPD}" = "" -o "${OPD}" = "${RSLT_OPEDATE}" ];then
		SH_TG_MNTH=${SAVE_END_MNTH}
	else

		OPD_MNTH=`echo ${OPD}|cut -c-6`
		echo '■パラメータ年月日-------------------->'${OPD_MNTH}

		# パラメータ年月チェック
		if [ ${SAVE_STT_MNTH} -le ${OPD_MNTH} -a ${OPD_MNTH} -le ${SAVE_END_MNTH} ]
		then
			SH_TG_MNTH=${OPD_MNTH}
		else
			# チェックエラーの場合、パラメータチェックエラーフラグを設定
			PRAM_ERROR='1'
		fi
	fi

	SH_STT_MNTH=${SH_TG_MNTH}'01'
	NDATE=`date -d "1 month ${SH_STT_MNTH}" +%Y%m%d`
	SH_END_MNTH=`date -d "1 day ago ${NDATE}" +%Y%m%d`

	echo '■集計対象年月------------------------>'${SH_TG_MNTH}
	echo '■集計開始年月日（SH_STT_MNTH）------->'${SH_STT_MNTH}
	echo '■集計終了年月日（SH_END_MNTH）------->'${SH_END_MNTH}

	echo '■バッチ運用日取得エラー ------------->'${BDATE_ERROR}
	echo '■パラメータ年月エラー --------------->'${PRAM_ERROR}
fi

#
# --- 各種変数の定義
#
ULD_OUTFILE=${MID_DIR_KK}/${JOBNAME}.ULD_TMP.csv
KK1311_DEL=${MID_DIR_KK}/${JOBNAME}.KK1311_DEL.csv
KK0351_CUR=${MID_DIR_KK}/${JOBNAME}.KK0351_CUR.csv
KK0821_CUR=${MID_DIR_KK}/${JOBNAME}.KK0821_CUR.csv
KK0341_CUR=${MID_DIR_KK}/${JOBNAME}.KK0341_CUR.csv
ZM0471_CUR=${MID_DIR_KK}/${JOBNAME}.ZM0471_CUR.csv
KK0351_MTC=${MID_DIR_KK}/${JOBNAME}.KK1311_INS.csv

# 出力ファイルの初期化
cat /dev/null > ${ULD_OUTFILE}
cat /dev/null > ${KK1311_DEL}
cat /dev/null > ${KK0351_CUR}
cat /dev/null > ${KK0821_CUR}
cat /dev/null > ${KK0341_CUR}
cat /dev/null > ${ZM0471_CUR}
cat /dev/null > ${KK0351_MTC}

# 各種アンロードクエリファイル
KK1311_ULD_QUERY=${SQL_DIR}/KK_U_KK1311_01.sql
KK0351_ULD_QUERY=${SQL_DIR}/KK_U_KK0351_06.sql
KK0821_ULD_QUERY=${SQL_DIR}/KK_U_KK0821_01.sql
KK0341_ULD_QUERY=${SQL_DIR}/KK_U_KK0341_11.sql
ZM0471_ULD_QUERY=${SQL_DIR}/KK_U_ZM0471_02.sql

if [ "${BDATE_ERROR}" = "0" -a "${PRAM_ERROR}" = "0" ];then


	# KK1311(KK_T_TV_OP_WATCH_JSK)の全データをアンロード
	EXEC_UNLOAD ${KK1311_ULD_QUERY} ${ULD_OUTFILE}

	# KK1311のデータ取得
	#  KK1311の集計年月 < データ保存開始年月 AND 集計年月 = 集計対象年月
	#  - SELECT(reconst)項目は以下
	#      0 - 0.6    ：集計年月
	bsortex -sort key="0.6asc" -record recform=txtcsv -input reclen=15 include="0.6asc.lt.'${SAVE_STT_MNTH}'.or.0.6asc.eq.'${SH_TG_MNTH}'" < ${ULD_OUTFILE} \
	  | bsortex -merge key="0.6asc" -record recform=txtcsv -input reclen=15 -summary suppress last -output file=${KK1311_DEL}

	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

	echo "■KK1311_DEL ---------line count--> "`wc -l ${KK1311_DEL}`

	# KK0351(KK_T_OP_SVC_KEI)の全カレントデータをアンロード
	#  KK0351のカレントデータ AND サービス開始年月日 <= 集計終了年月日 AND サービス終了年月日 >= 集計開始年月日
	#  - SELECT(reconst)項目は以下
	#      0 - 3.4    ：オプションサービスコード
	#      1 - 2.3    ：オプションサービス契約ステータス
	#      2 - 6.2    ：親契約識別コード
	#      3 - 7.10   ：サービス契約番号
	#      4 - 8.12   ：サービス契約内訳番号
	#      5 - 10.10  ：SYSID
	#      6 - 33.8   ：サービス開始年月日
	#      7 - 48.8   ：サービス終了年月日
	#      8 - 42.8   ：サービス休止年月日
	#      9 - 45.8   ：サービス休止解除年月日
	#     10 - 50.8   ：サービス課金終了年月日
	#     11 - 23.8   ：予約適用年月日
	#     12 - 1.17   ：世代登録年月日時分秒
	#     13 - 25.1   ：予約適用コード
	#     14 - 72.1   ：無効フラグ
	EDIT_ULD_QUERY ${KK0351_ULD_QUERY} "${RSLT_OPEDATE} ${SH_END_MNTH} ${SH_STT_MNTH}"
	EXEC_UNLOAD ${SQL_WORK_FILE} ${KK0351_CUR}

	echo "■KK0351_CUR ---------line count--> "`wc -l ${KK0351_CUR}`

	# KK0821(KK_M_OP_SVC)の全カレントデータをアンロード
	#  KK0821のカレントデータ AND オプションチャンネル種別コード IN ('01', '02')
	#  - SELECT(reconst)項目は以下
	#      0 - 0.4    ：オプションサービスコード
	#      1 - 19.2   ：オプションチャンネル種別コード
	#      2 - 3.8    ：予約適用年月日
	#      3 - 1.17   ：世代登録年月日時分秒
	#      4 - 4.8    ：オプションサービス適用開始年月日
	#      5 - 5.8    ：オプションサービス適用終了年月日
	#      6 - 28.1   ：無効フラグ
	EDIT_ULD_QUERY ${KK0821_ULD_QUERY} "${RSLT_OPEDATE} ${RSLT_OPEDATE}"
	EXEC_UNLOAD ${SQL_WORK_FILE} ${KK0821_CUR}

	echo "■KK0821_CUR ---------line count--> "`wc -l ${KK0821_CUR}`

	# KK0341(KK_T_KKTK_SVC_KEI)の全カレントデータをアンロード
	#  KK0341のカレントデータ AND 宅内機器種別コード = 'A0'
	#  - SELECT(reconst)項目は以下
	#      0 - 14.20   ：宅内機器型式コード
	#      1 - 15.20   ：機器製造番号
	#      2 - 26.12   ：サービス契約内訳番号
	#      3 - 13.2    ：宅内機器種別コード
	#      4 - 0.12    ：機器提供サービス契約番号
	#      5 - 98.8    ：予約適用年月日
	#      6 - 1.17    ：世代登録年月日時分秒
	#      7 - 100.1   ：予約適用コード
	EDIT_ULD_QUERY ${KK0341_ULD_QUERY} "${RSLT_OPEDATE}"
	EXEC_UNLOAD ${SQL_WORK_FILE} ${KK0341_CUR}

	echo "■KK0341_CUR ---------line count--> "`wc -l ${KK0341_CUR}`

	# ZM0471(ZM_T_TAKNKIKI_WK)の全データをアンロード
	EXEC_UNLOAD ${ZM0471_ULD_QUERY} ${ULD_OUTFILE}

	# ZM0471のデータ取得
	#  - SELECT(reconst)項目は以下
	#      0 - 40.12  ：STBID
	#      1 - 1.20   ：宅内機器型式コード
	#      2 - 2.20   ：機器製造番号
	#      3 - 72.1   ：無効フラグ
	bsortex -sort key="1.20asc" -record recform=txtcsv -input reclen=100 file=${ULD_OUTFILE} include="3.1asc.eq.'0'" -output file=${ZM0471_CUR}

	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

	echo "■ZM0471_CUR ---------line count--> "`wc -l ${ZM0471_CUR}`

	GET_MIN_FILESIZE "${KK0351_CUR} ${KK0821_CUR}"
	MIN_SIZE=$?
	if [ ${MIN_SIZE} -gt 0 ]
	then

		GET_MIN_FILESIZE "${KK0341_CUR} ${ZM0471_CUR}"
		MIN_SIZE=$?
		if [ ${MIN_SIZE} -gt 0 ]
		then

			MATCH_TMP_OUT_FILE=${MID_DIR_KK}/${JOBNAME}.MATCH_TMP.csv
			cat /dev/null > ${MATCH_TMP_OUT_FILE}

			# マッチング実行
			# 工事案件ステータスが'900'のレコードは対象外
			#  - SELECT(reconst)項目は以下
			#      0 - 3.4    ：オプションサービスコード
			#      1 - 6.2    ：親契約識別コード
			#      2 - 7.10   ：サービス契約番号
			#      3 - 8.12   ：サービス契約内訳番号
			#      4 - 10.10  ：SYSID
			#      5 - 42.8   ：サービス休止年月日
			#      6 - 45.8   ：サービス休止解除年月日
			#      7 - 50.8   ：サービス課金終了年月日
			#      8 - 15.20  ：機器製造番号
			#      9 - 40.12  ：STBID
			EDIT_MATCHING_QUERY ${G_TOOLSH}/util/def/KK_CM_0091.def "${KK0351_CUR} ${KK0821_CUR} ${KK0341_CUR} ${ZM0471_CUR}"
			EXEC_MATCHING ${MATCH_TMP_OUT_FILE} ${MATCHING_QUERY_WORK}
			
			bsortex -sort key="0.4asc,1.2asc,2.10asc,3.12asc" -record recform=txtcsv -input  file=${MATCH_TMP_OUT_FILE} reclen=150 \
			  | bsortex -merge key="0.4asc,1.2asc,2.10asc,3.12asc" -record recform=txtcsv -input reclen=150 -summary suppress last -output file=${KK0351_MTC}
			
			echo "■KK1311_INS ---------line count--> "`wc -l ${KK0351_MTC}`

			# マッチング（一時）データの削除
			rm ${MATCH_TMP_OUT_FILE}
		
		else
		
			MATCH_TMP_OUT_FILE=${MID_DIR_KK}/${JOBNAME}.MATCH_TMP.csv
			MATCH_TMP_OUT_FILE2=${MID_DIR_KK}/${JOBNAME}.MATCH_TMP2.csv
			cat /dev/null > ${MATCH_TMP_OUT_FILE}
			cat /dev/null > ${MATCH_TMP_OUT_FILE2}

			# マッチング実行
			# 工事案件ステータスが'900'のレコードは対象外
			#  - SELECT(reconst)項目は以下
			#      0 - 3.4    ：オプションサービスコード
			#      1 - 6.2    ：親契約識別コード
			#      2 - 7.10   ：サービス契約番号
			#      3 - 8.12   ：サービス契約内訳番号
			#      4 - 10.10  ：SYSID
			#      5 - 42.8   ：サービス休止年月日
			#      6 - 45.8   ：サービス休止解除年月日
			#      7 - 50.8   ：サービス課金終了年月日
			#      8 - 15.20  ：機器製造番号
			#      9 - 40.12  ：STBID
			EDIT_MATCHING_QUERY ${G_TOOLSH}/util/def/KK_CM_0092.def "${KK0351_CUR} ${KK0821_CUR}"
			EXEC_MATCHING ${MATCH_TMP_OUT_FILE} ${MATCHING_QUERY_WORK}
			
			bsortex -sort key="0.4asc,1.2asc,2.10asc,3.12asc" -record recform=txtcsv -input  file=${MATCH_TMP_OUT_FILE} reclen=150 \
			  | bsortex -merge key="0.4asc,1.2asc,2.10asc,3.12asc" -record recform=txtcsv -input reclen=150 -summary suppress last -output file=${MATCH_TMP_OUT_FILE2}
			
			echo "■ダミー項目追加"
			# ダミー項目を追加
			#  - SELECT(reconst)項目は以下
			#      0 - 3.4    ：オプションサービスコード
			#      1 - 6.2    ：親契約識別コード
			#      2 - 7.10   ：サービス契約番号
			#      3 - 8.12   ：サービス契約内訳番号
			#      4 - 10.10  ：SYSID
			#      5 - 42.8   ：サービス休止年月日
			#      6 - 45.8   ：サービス休止解除年月日
			#      7 - 50.8   ：サービス課金終了年月日
			#      8 - 15.20  ：機器製造番号（ダミー）
			#      9 - 40.12  ：STBID（ダミー）
			# レコード末尾に２項目分のカンマを追加
			sed -e 's/$/,"",""/g' ${MATCH_TMP_OUT_FILE2} > ${KK0351_MTC}

			# マッチング（一時）データの削除
			rm ${MATCH_TMP_OUT_FILE}
			rm ${MATCH_TMP_OUT_FILE2}

			echo "■KK1311_INS ---------line count--> "`wc -l ${KK0351_MTC}`
			
		fi
	fi
fi

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

P1="OPD=$OPD,"
P2="SVCCTL=JBSbatUnitServiceControl,"
P3="JOB=EO2DK0110J0,"
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=${KK1311_DEL};${KK0351_MTC};${BDATE_ERROR};${PRAM_ERROR};${OPD};${SH_TG_MNTH};${SH_STT_MNTH};${SH_END_MNTH}"
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

#
#---ＡＰＬ起動
#
java ${JAVA_OPTION} -jar ${JAR_DIR}/koptBatch.jar $PARA

rc=$?
ERR_FLG=0
if [ $rc -ne 0 ]
then
   if [ $rc -ne 4 ]
   then
       if [ $rc -ne 8 ]
       then
           if [ $rc -ne 127 ]
           then
              sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " PROGRAM Error($SVC program:rc=$rc) "
              echo $JOBNAME " PROGRAM Error($SVC program:rc=$rc) "
              exit ${G_RTN_ERROR}
           fi
       fi
    fi
    ERR_FLG=1
fi

exit_rc=$rc

# 各種一時ファイルの削除
rm ${ULD_OUTFILE}
rm ${KK0351_CUR}
rm ${KK0821_CUR}
rm ${KK0341_CUR}
rm ${ZM0471_CUR}

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

exit $exit_rc
