#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：契約管理
#
# シェル名      ：主契約開始分機器抽出
#
# 機能          ：主契約が開始されている締結済みの機器契約の情報を抽出する
#
# コマンド形式  ：EO2B20130K0.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：出力ファイル名
#       p2：クエリファイル名
#       p3：バインド変数置換文字
#
EXEC_UNLOAD()
{
	OTF=$1
	SQL_FILE=$2
	BIND_VAL=$3
	
	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}:rc=$rc) "
		echo $JOBNAME " File is nonexist(${SQL_FILE}:rc=$rc) "
		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}
	rc=$?
	if [ $rc -ne 0 ]
	then
		sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File cat error(${OTF}:rc=$rc) "
		echo $JOBNAME " File cat error(${OTF}:rc=$rc) "
		exit ${G_RTN_ERROR}
	fi
	
	# unload
	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
}

#
#--- マッチング処理
#      p1：出力ファイルパス
#      p2：マッチングクエリファイルパス
#      p3：バインド変数
EXEC_MATCHING()
{
	OUTFILE=$1
	MATCHING_FILE=$2
	CONV_FILE=$3
	MATCHING_QUERY_WORK=${ULD_WORK_DIR}/${JOBNAME}.W_MATCH_QUERY.tmp

	# マッチングクエリファイルの初期化
	cat /dev/null > ${MATCHING_QUERY_WORK}
	
	# マッチングクエリファイルの存在チェック
	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 ${CONV_FILE}
	do
		# 入力パラメータのエスケープ処理
		bind_escape=`echo $bind | sed "s/\//\\\\\\\\\//g"`
		sed -i, -e 0,/#FILE#/s/#FILE#/$bind_escape/ ${MATCHING_QUERY_WORK}
		
	done
	
	# 出力ファイルの初期化
	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 ${MATCHING_QUERY_WORK}
	
	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
}

#
# -- カレント取得処理
#
FILTER_CURRENT()
{
	INF=$1
	OTF=$2
	REC_LEN=$3
	BS_DEF=$4
	
	SORT_KEY=""
	
	# ソートKEYを構築（@keyで始まる定義を取得）
	for key in ${BS_DEF}
	do
		case "$key" in 
			@key* ) 
				if [ "${SORT_KEY}" != "" ]
				then
					SORT_KEY="${SORT_KEY},"
				fi
				SORT_KEY="${SORT_KEY}${key%=*}"
			;;
		esac
	done
	
	bsortex -define ${BS_DEF} -sort key=${SORT_KEY},@rsvAplyYmd,@supkey -record recform=txtcsv -input reclen=${REC_LEN} include="@mkflg.eq.'0'.and.@rsvAplyCd.eq.'2'.and.@rsvAplyYmd.le.'${OPD}'" < ${INF} \
	  | bsortex -define ${BS_DEF} -merge key="${SORT_KEY}" -record recform=txtcsv -input reclen=${REC_LEN} -summary suppress last -output file=${OTF}
	  
	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
}

#
# -- 作業ファイルの削除
#
REMOVE_WORK_FILE()
{
	for workfile in `ls -1 ${MID_DIR_KK}/${JOBNAME}.W_*.csv`
	do
		rm -f ${workfile}
	done
	
}

KK0081_ULD=${MID_DIR_KK}/${JOBNAME}.W_KK0081_U.csv
KK0341_ULD=${MID_DIR_KK}/${JOBNAME}.W_KK0341_U.csv
DK0011_ULD=${MID_DIR_KK}/${JOBNAME}.W_DK0011_U.csv
DK0021_ULD=${MID_DIR_KK}/${JOBNAME}.W_DK0021_U.csv

MATCH_OTF=${MID_DIR_KK}/${JOBNAME}.W_MATCH_OTF.csv

KK0081_CURRENT=${MID_DIR_KK}/${JOBNAME}.W_KK0081_CUR.csv
KK0081_TRG=${MID_DIR_KK}/${JOBNAME}.W_KK0081_TRG.csv
KK0341_CURRENT=${MID_DIR_KK}/${JOBNAME}.W_KK0341_CUR.csv
KK0341_TRG=${MID_DIR_KK}/${JOBNAME}.W_KK0341_TRG.csv

DK0011_TRG=${MID_DIR_KK}/${JOBNAME}.W_DK0011_TRG.csv
DK0021_TRG=${MID_DIR_KK}/${JOBNAME}.W_DK0021_TRG.csv

#
# BSORTの項目定義
#
KK0081_ITM_DEF="@svcKeiNo=0.10asc @geneAddDtm=1.17asc @rsvAplyYmd=2.8asc @rsvAplyCd=3.1asc @mkFlg=4.1asc @svcKeiStat=5.3asc"
KK0341_ITM_DEF="@kktkSvcKeiNo=0.12asc @geneAddDtm=1.17asc @svcKeiNo=2.10asc @taknkikiSbtCd=3.2asc @kktkSvcKeiStat=4.3asc @kikiChgNo=5.12asc @taknkikiModelCd=6.20asc @kikiSeizoNo=7.20asc @rsvAplyYmd=8.8asc @rsvAplyCd=9.1asc @mkFlg=10.1asc"
DK0011_ITM_DEF="@haisoNo=0.10asc @haisoFinYmd=1.8asc @mkFlg=2.1asc"
DK0021_ITM_DEF="@haisoNo=0.10asc @kktkSvcKeiNo=1.12asc @kikiChgNo=2.12asc @kojiakNo=3.10asc @mkFlg=4.1asc @blank=5.1asc"

#
# -- アンロード処理（各基礎情報のアンロード）
#
UNLOAD_BASE_DATA()
{
	#サービス契約
	EXEC_UNLOAD ${KK0081_ULD} ${SQL_DIR}/KK_U_KK0081_73.sql ""
	#機器提供サービス契約
	EXEC_UNLOAD ${KK0341_ULD} ${SQL_DIR}/KK_U_KK0341_15.sql ""
	#配送
	EXEC_UNLOAD ${DK0011_ULD} ${SQL_DIR}/KK_U_DK0011_03.sql ""
	#配送対象物品
	EXEC_UNLOAD ${DK0021_ULD} ${SQL_DIR}/KK_U_DK0021_02.sql ""

	#サービス契約カレント取得
	FILTER_CURRENT ${KK0081_ULD} ${KK0081_CURRENT} 200 "@key1=0.10asc @supkey=1.17asc @mkflg=4.1asc @rsvAplyCd=3.1asc @rsvAplyYmd=2.8asc"
	#機器提供サービス契約カレント取得
	FILTER_CURRENT ${KK0341_ULD} ${KK0341_CURRENT} 300 "@key1=0.12asc @supkey=1.17asc @mkflg=10.1asc @rsvAplyCd=9.1asc @rsvAplyYmd=8.8asc"

	#
	# *** 有効なサービス契約の取得（カレントから絞込み） ***
	#
	bsortex -define ${KK0081_ITM_DEF} -sort key="@svcKeiNo" -record recform=txtcsv -input reclen=100 \
			include="@svcKeiStat.eq.'100'.or.@svcKeiStat.eq.'210'.or.@svcKeiStat.eq.'220'" -output file=${KK0081_TRG} < ${KK0081_CURRENT}
	
	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
	
	#
	# *** 有効な機器提供サービス契約の取得（カレントから絞込み） ***
	#
	bsortex -define ${KK0341_ITM_DEF} -sort key="@kktkSvcKeiNo" -record recform=txtcsv -input reclen=200 \
			include="@taknkikiSbtCd.eq.'P0'.and.@kktkSvcKeiStat.eq.'030'" -output file=${KK0341_TRG} < ${KK0341_CURRENT}
	
	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

	#
	# *** 有効な配送の取得（カレントから絞込み） ***
	#
	bsortex -define ${DK0011_ITM_DEF} -sort key="@haisoNo" -record recform=txtcsv -input reclen=100 \
			include="@haisoFinYmd.ge.' '.and.@haisoFinYmd.le.'${OPD}'.and.@mkFlg.eq.'0'" -output file=${DK0011_TRG} < ${DK0011_ULD}
	
	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

	#
	# *** 有効な配送対象物品の取得（カレントから絞込み） ***
	#
	bsortex -define ${DK0021_ITM_DEF} -sort key="@haisoNo" -record recform=txtcsv -input reclen=100 \
			include="@kojiakNo.eq.@blank.and.@mkFlg.eq.'0'" -output file=${DK0021_TRG} < ${DK0021_ULD}
	
	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
}


#
# -- 出力処理の初期化
#
cat /dev/null > ${MID_DIR_KK}/KKIFM216001.csv

#各種アンロード
UNLOAD_BASE_DATA

cat /dev/null > ${MATCH_OTF}

#
# 各種アンロード結果をマッチング
#
if [ `cat ${KK0081_TRG} | wc -l` -ne 0 -a `cat ${KK0341_TRG} | wc -l` -ne 0 -a `cat ${DK0021_TRG} | wc -l` -ne 0 -a `cat ${DK0011_TRG} | wc -l` -ne 0 ]
then
	EXEC_MATCHING ${MATCH_OTF} ${G_TOOLSH}/util/def/KK_CM_0166.def "${KK0081_TRG} ${KK0341_TRG} ${DK0021_TRG} ${DK0011_TRG}"
fi

#
# ダブルクォートを削除
#
cat ${MATCH_OTF} | sed -e 's/"//g' > ${MID_DIR_KK}/KKIFM216001.csv


#
# 作業ファイルを全て削除
#
REMOVE_WORK_FILE

exit $exit_rc
