#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：契約管理
#
# シェル名      ：サービス契約スキーマ抽出
#
# 機能          ：1. サービス契約スキーマからデータを抽出する。
#                 
#                 2. 1.で抽出したデータをキー項目(サービス契約番号)毎に
#                    予約適用年月日、世代年月日時分秒でソートする。
#                 
#                 3. 2.でソートしたデータに対し、キー項目(サービス契約番号)毎に
#                    カレントレコードのみを残し、かつ抽出条件を満たすレコードのみを出力する。
#
# コマンド形式  ：EO40B0130J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
#
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

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

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

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

P1="OPD=$OPD,"
P2="SVCCTL=JBSbatUnitServiceControl,"
P3="JOB=EO40B0130J0,"
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="
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

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

# 各種マッチング定義
MATCH_KK0081_01=${G_TOOLSH}/util/def/CN_CM_0002.def
MATCH_KK0081_02=${G_TOOLSH}/util/def/CN_CM_0003.def
MATCH_KK0081_01_TMP=${MID_DIR_CN}/${JOBNAME}.CN_CM_0002_TMP.def
MATCH_KK0081_02_TMP=${MID_DIR_CN}/${JOBNAME}.CN_CM_0003_TMP.def
cat /dev/null > ${MATCH_KK0081_01_TMP}
cat /dev/null > ${MATCH_KK0081_02_TMP}

#
#--- ファイル定義
#
SQLFILE_KK0081=${SQL_DIR}/CN_U_KK0081_01.sql
OUTFILE_KK0081=${MID_DIR_CN}/CNIFM006001.csv
SQLFILE_ZM0171=${SQL_DIR}/CN_U_ZM0171_01.sql
OUTFILE_ZM0171=${MID_DIR_CN}/CNIFM007001.csv
KK0081_FIN_OUTFILE_01=${MID_DIR_CN}/${JOBNAME}.MATCH_FIN_KK0081_01.csv
KK0081_FIN_OUTFILE_02=${MID_DIR_CN}/${JOBNAME}.MATCH_FIN_KK0081_02.csv

cat /dev/null > ${OUTFILE_KK0081}
cat /dev/null > ${OUTFILE_ZM0171}
cat /dev/null > ${KK0081_FIN_OUTFILE_01}
cat /dev/null > ${KK0081_FIN_OUTFILE_02}

TMPSQLFILE_KK0081=${ULD_WORK_DIR}/CN_U_KK0081_01.EO40B0130J0.tmp.sql
TMPSQLFILE_ZM0171=${ULD_WORK_DIR}/CN_U_ZM0171_01.EO40B0130J0.tmp.sql

#
#--- 各ファイルの存在チェックを行う
#
if [ ! -r $SQLFILE_KK0081 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist($SQLFILE_KK0081) "
    echo $JOBNAME " File is nonexist($SQLFILE_KK0081) "
    exit ${G_RTN_ERROR}
fi

#
#--- アンロードファイルのクリアを行う
#
cat /dev/null > $OUTFILE_KK0081

rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File cat error($OUTFILE_KK0081:rc=$rc) "
    echo $JOBNAME " File cat error($OUTFILE_KK0081:rc=$rc) "
    exit ${G_RTN_ERROR}
fi

cat /dev/null > $OUTFILE_ZM0171

rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File cat error($OUTFILE_ZM0171:rc=$rc) "
    echo $JOBNAME " File cat error($OUTFILE_ZM0171:rc=$rc) "
    exit ${G_RTN_ERROR}
fi

#
#--- バインド変数設定処理
#
cat ${SQLFILE_KK0081} > ${TMPSQLFILE_KK0081}
cat ${SQLFILE_ZM0171} > ${TMPSQLFILE_ZM0171}

#
#--- UNLOAD処理
#
sh ${G_TOOLSH}/EOKULD03.sh ${TMPSQLFILE_KK0081} ${OUTFILE_KK0081}

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

sh ${G_TOOLSH}/EOKULD03.sh ${TMPSQLFILE_ZM0171} ${OUTFILE_ZM0171}
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

#
#--- SQLファイルのクリア
#
rm -f ${TMPSQLFILE_KK0081}
rm -f ${TMPSQLFILE_ZM0171}

#
#--- 当月を取得
#
OPEDATE_YYYYMM=`echo $RSLT_OPEDATE |cut -c 1-6`

#
#--- サービス契約番号、SYSID、予約適用年月日、世代登録年月日時分秒でソート
# 抽出条件
#    無効フラグ = '0'
#    予約適用コード = '2'
#    予約適用年月日 <= 運用日
#    料金グループコード <> 14(ホスティングデータは削除)
#
bsortex -sort key=0.10asc,1.10asc,2.8asc,3.17asc -record recform=txtcsv -input file=${OUTFILE_KK0081} reclen=104 include="10.1asc.eq.'0',4.1asc.eq.'2',2.8asc.le.'${RSLT_OPEDATE}',6.2asc.ne.'14'" -output file=${MID_DIR_CN}/CNIFM006001_sort.csv

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 -merge key=0.10asc -record recform=txtcsv -input file=${MID_DIR_CN}/CNIFM006001_sort.csv reclen=104 -summary suppress last -output file=${MID_DIR_CN}/CNIFM006001_crnt.csv

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

# マッチング用
MATCH_TMP_OUT_FILE_01=${MID_DIR_CN}/${JOBNAME}.MATCH_KK0081_01.csv
MATCH_TMP_OUT_FILE_02=${MID_DIR_CN}/${JOBNAME}.MATCH_KK0081_02.csv
cat /dev/null > ${MATCH_TMP_OUT_FILE_01}
cat /dev/null > ${MATCH_TMP_OUT_FILE_02}

# 変数を書き換える
sed -e "s/:OPTINM_NO/${line}/g" ${MATCH_KK0081_01} > ${MATCH_KK0081_01_TMP}
sed -e "s/:OPTINM_NO/${line}/g" ${MATCH_KK0081_02} > ${MATCH_KK0081_02_TMP}

# マッチング実行
#  - SELECT(reconst)項目は以下
#      0 - -.10   ：サービス契約番号
#      1 - -.10   ：SYSID
#      2 - -.8    ：予約適用年月日
#      3 - -.17   ：世代登録年月日時分秒
#      4 - -.1    ：予約適用コード
#      5 - -.3    ：サービス契約ステータス
#      6 - -.2    ：料金グループコード
#      7 - -.3    ：料金コースコード
#      8 - -.8    ：照査年月日
#      9 - -.8    ：サービス終了年月日
#     10 - -.1    ：無効フラグ
EDIT_MATCHING_QUERY ${MATCH_KK0081_01_TMP} "${MID_DIR_CN}/CNIFM006001_crnt.csv ${OUTFILE_ZM0171}"
EXEC_MATCHING ${MATCH_TMP_OUT_FILE_01} ${MATCHING_QUERY_WORK}

# マッチング実行
#  - SELECT(reconst)項目は以下
#      0 - -.10   ：サービス契約番号
#      1 - -.10   ：SYSID
#      2 - -.8    ：予約適用年月日
#      3 - -.17   ：世代登録年月日時分秒
#      4 - -.1    ：予約適用コード
#      5 - -.3    ：サービス契約ステータス
#      6 - -.2    ：料金グループコード
#      7 - -.3    ：料金コースコード
#      8 - -.8    ：照査年月日
#      9 - -.8    ：サービス終了年月日
#     10 - -.1    ：料金グループコード表示順
#     11 - -.1    ：料金グループ名称
EDIT_MATCHING_QUERY ${MATCH_KK0081_02_TMP} "${MATCH_TMP_OUT_FILE_01} ${OUTFILE_ZM0171}"
EXEC_MATCHING ${MATCH_TMP_OUT_FILE_02} ${MATCHING_QUERY_WORK}

# ダブルクォーテーション削除
sed -e 's/"//g' ${MATCH_TMP_OUT_FILE_02} > ${KK0081_FIN_OUTFILE_01}

#
#--- サービス契約番号でソート
#
bsortex -sort key=0.10asc -record recform=txtcsv -input file=${KK0081_FIN_OUTFILE_01} reclen=150 -output file=${KK0081_FIN_OUTFILE_02}

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

exit_rc=$rc

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

exit $exit_rc
