#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：契約管理
#
# シェル名      ：割引サービス対象契約_振り分け
#
# 機能          ：1. 入力ファイルの対象契約識別コードの値によって、ファイルを振り分ける。
#                 2. それぞれのファイル内で、抽出契約区分、契約番号 でソート、集約する。
#                 3. 上記の５つのファイルをマージして１つのファイルにする。
#
# コマンド形式  ：EO232013SJ0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v7.00           2014/02/20  FJ）鈴木     【OM-2013-0002902】性能改善対応により新規作成
# v7.01           2014/03/06  FJ）鈴木     【OM-2013-0005000】性能改善対応 機器オプションを追加
# v15.00.00       2015/08/28  FJ)土井      【OM-2015-0002143】性能改善 機器提供サービス契約関連
# v22.00.00       2016/01/26  FJ)土井      【OM-2016-0000285】性能改善：reconstを-outputから-inputに移動
#
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

#
#---業務で必要な変数定義
#
#---運用日付取得
if [ "${OPD}" = "" ]; then
   . EOK010310J0.sh "BDATE"
else
   RSLT_OPEDATE="${OPD}"
fi

# 入力ファイル
INPUT_FILE=${MID_DIR_KK}/KKIFM300001_sort.csv
# OM-2015-0002143 性能改善 機器提供サービス契約関連 2015/08/28 土井 ADD START
INPUT_FILE_1=${MID_DIR_KK}/KKIFM023059_01.csv
INPUT_FILE_2=${MID_DIR_KK}/KKIFM023059_02.csv
INPUT_FILE_3=${MID_DIR_KK}/KKIFM023059_03.csv
# OM-2015-0002143 性能改善 機器提供サービス契約関連 2015/08/28 土井 ADD END

# 出力ファイル
OUTPUT_FILE_1_11=${MID_DIR_KK}/KKIFM023042_11.csv
OUTPUT_FILE_2_20=${MID_DIR_KK}/KKIFM023042_20.csv
OUTPUT_FILE_3_21=${MID_DIR_KK}/KKIFM023042_21.csv
OUTPUT_FILE_4_30=${MID_DIR_KK}/KKIFM023042_30.csv
OUTPUT_FILE_5_40=${MID_DIR_KK}/KKIFM023042_40.csv
# 2014.03.06 OM-2013-0005000 add start
OUTPUT_FILE_6_31=${MID_DIR_KK}/KKIFM023042_31.csv
# 2014.03.06 OM-2013-0005000 add end

# OM-2015-0002143 性能改善 機器提供サービス契約関連 2015/08/28 土井 ADD START
# マッチング用一時ファイル
LOC_FILE_1=${MID_DIR_KK}/${JOBNAME}_KKIFM023059_30_tmp.csv
LOC_FILE_2=${MID_DIR_KK}/${JOBNAME}_KKIFM023059_0103_tmp.csv
LOC_FILE_3=${MID_DIR_KK}/${JOBNAME}_KKIFM023059_all_tmp.csv
# OM-2015-0002143 性能改善 機器提供サービス契約関連 2015/08/28 土井 ADD END

OUTPUT_FILE=${MID_DIR_KK}/KKIFM023042_all.csv

#########################################################################
#ファンクション：指定されたキー種別に応じて振り分けてファイルに出力する。
# 引数１：入力ファイルの対象契約識別コード、
# 引数２：出力ファイルの抽出契約区分
# 引数３：入力ファイルのキー項目の位置（０始まり）
# 引数４：入力ファイルのキー項目の文字列長
# 引数５：出力ファイル名
#
# 指定された対象契約識別コードのみを抽出し、対象契約識別コードとキー項目 でソートする。
# さらに対象契約識別コードとキー項目で集約する。
# 
# 1項目目：引数２の出力ファイルの抽出契約区分
# 2項目目：null
# 3項目目：対象のキー
#
# 例："11","","000000000001"
#########################################################################
function sort_merge () {
  IN_CODE=$1
  OUT_CODE=$2

  KEY_POS=$3
  KEY_LEN=$4

  OUT_FILE=$5

  # 出力ファイルを初期化しておく
  cat /dev/null > ${OUT_FILE}

  # 必要な対象契約識別コードのみを抽出、ソートし、reconst
# OM-2016-0000285 2016/01/26 土井 MOD START
#  bsortex -sort key=3.2asc,${KEY_POS}.${KEY_LEN}asc -record recform=txtcsv \
#    -input file=${INPUT_FILE} reclen=300 include="3.2asc.eq.'${IN_CODE}'" \
#    -output file=${OUT_FILE}.tmp reconst="'${OUT_CODE}'.2ascA,EMPTYA,${KEY_POS}.${KEY_LEN}"
  # -copyより-sortの処理が早かった為、便宜上、EMPTYAの値をソートキーに指定
  bsortex -sort key=1.1asc -record recform=txtcsv \
    -input file=${INPUT_FILE} reclen=300 include="3.2asc.eq.'${IN_CODE}'" \
     reconst="'${OUT_CODE}'.2ascA,EMPTYA,${KEY_POS}.${KEY_LEN}" \
    -output file=${OUT_FILE}
# OM-2016-0000285 2016/01/26 土井 MOD END

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

# OM-2016-0000285 2016/01/26 土井 DEL START
#  bsortex -merge key=0.2asc,2.${KEY_LEN}asc -record recform=txtcsv \
#   -input file=${OUT_FILE}.tmp reclen=30 -summary suppress last \
#   -output file=${OUT_FILE}
#
#  rc=$?
#  if [ $rc -ne 0 ]
#  then
#      sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " MERGE Error($SVC merge:rc=$rc IN_CODE=${IN_CODE} file=${INPUT_FILE}) "
#      echo $JOBNAME " MERGE Error($SVC merge:rc=$rc IN_CODE=${IN_CODE} file=${INPUT_FILE}) "
#      exit ${G_RTN_ERROR}
#  fi
# OM-2016-0000285 2016/01/26 土井 DEL END
}


# OM-2015-0002143 性能改善 機器提供サービス契約関連 2015/08/28 土井 ADD START
#
#--- クエリ編集
#       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_MATCH=$1
	cat /dev/null > ${OUTFILE_MATCH}
	rc=$?
	if [ $rc -ne 0 ]
	then
		sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File cat error(${OUTFILE_MATCH}:rc=$rc) "
		echo $JOBNAME " File cat error(${OUTFILE_MATCH}:rc=$rc) "
		exit ${G_RTN_ERROR}
	fi

	# マッチング実行
	export ZTLOUTFILE=${OUTFILE_MATCH}
	${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
}

#
# 機器提供サービス契約 個別処理
# OUTPUT_FILE_4_30の内容を回線(02)のみに、OUTPUT_FILEの内容をサービス契約と内訳(01,03)にする
#
exec_kk_match()
{
	# 回線(02)のみ用マッチング定義
	MATCH_KK02=${G_TOOLSH}/util/def/KK_CM_0549.def
	MATCH_KK02_TMP=${MID_DIR_CK}/${JOBNAME}.KK_CM_0549_TMP.def
	cat ${MATCH_KK02} > ${MATCH_KK02_TMP}
	EDIT_MATCHING_QUERY ${MATCH_KK02_TMP} "${LOC_FILE_1} ${INPUT_FILE_2}"
	EXEC_MATCHING ${OUTPUT_FILE_4_30} ${MATCHING_QUERY_WORK}

	# サービス契約と内訳(01,03)用マッチング定義
	MATCH_KK0103=${G_TOOLSH}/util/def/KK_CM_0550.def
	MATCH_KK0103_TMP=${G_TOOLSH}/util/def/KK_CM_0550_TMP.def
	cat ${MATCH_KK0103} > ${MATCH_KK0103_TMP}

# OM-2016-0000285 2016/01/26 土井 MOD START
#	bsortex -sort key=0.12asc -record recform=txtcsv -input file=${INPUT_FILE_1},${INPUT_FILE_3} reclen=30 reconst="2.12" -output file=${LOC_FILE_2}
	bsortex -copy -record recform=txtcsv -input file=${INPUT_FILE_1},${INPUT_FILE_3} reclen=30 reconst="2.12" -output file=${LOC_FILE_2}
# OM-2016-0000285 2016/01/26 土井 MOD END
	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

	EDIT_MATCHING_QUERY ${MATCH_KK0103_TMP} "${LOC_FILE_1} ${LOC_FILE_2}"
	EXEC_MATCHING ${LOC_FILE_3} ${MATCHING_QUERY_WORK}
}
# OM-2015-0002143 性能改善 機器提供サービス契約関連 2015/08/28 土井 ADD END

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

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

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

##############################################################
#入力ファイルの対象契約識別コードの値によって、ファイルを振り分ける。
#(01:サービス契約/03:サービス契約内訳/04:オプションサービス契約/05:サブオプションサービス契約
#/06:機器提供サービス契約/07:請求オプションサービス契約/10:機器オプションサービス契約)
#
#対象契約識別コード＝
#03: "11",,サービス契約内訳番号
#04: "20",,オプションサービス契約番号
#05: "21",,サブオプションサービス契約番号
#06: "30",,機器提供サービス契約番号
#07: "40",,請求オプションサービス契約番号
#10: "31",,機器オプションサービス契約番号
#
# さらに、抽出契約区分とキー番号でマージする。
#

# 1. サービス契約内訳レコード：03 、抽出契約区分=11、項目位置=5、項目長=12
sort_merge 03 11 5 12 ${OUTPUT_FILE_1_11}

# 2. オプションサービス契約レコード：04 、抽出契約区分=20、項目位置=6、項目長=12
sort_merge 04 20 6 12 ${OUTPUT_FILE_2_20}

# 3. サブオプションサービス契約レコード：05 、抽出契約区分=21、項目位置=7、項目長=12
sort_merge 05 21 7 12 ${OUTPUT_FILE_3_21}

# 4. 機器提供サービス契約レコード：06 、抽出契約区分=30、項目位置=8、項目長=12
# OM-2015-0002143 性能改善 機器提供サービス契約関連 2015/08/28 土井 MOD START
#sort_merge 06 30 8 12 ${OUTPUT_FILE_4_30}
sort_merge 06 30 8 12 ${LOC_FILE_1}
exec_kk_match
# OM-2015-0002143 性能改善 機器提供サービス契約関連 2015/08/28 土井 MOD END

# 5. 請求オプションサービス契約レコード：07 、抽出契約区分=40、項目位置=9、項目長=12
sort_merge 07 40 9 12 ${OUTPUT_FILE_5_40}

# 2014.03.06 OM-2013-0005000 add start
# 6. 機器オプションサービス契約レコード：10、抽出契約区分=31、項目位置=14、項目長=12
sort_merge 10 31 14 12 ${OUTPUT_FILE_6_31}
# 2014.03.06 OM-2013-0005000 add end

# 上記の５つのファイルをマージして１つのファイルにする。
# 2014.03.06 OM-2013-0005000 add： 機器オプ"OUTPUT_FILE_6_31"はマージ対象外です。
# OM-2015-0002143 性能改善 機器提供サービス契約関連 2015/08/28 土井 MOD START
#cat ${OUTPUT_FILE_1_11} ${OUTPUT_FILE_2_20} ${OUTPUT_FILE_3_21} ${OUTPUT_FILE_4_30} ${OUTPUT_FILE_5_40} > ${OUTPUT_FILE}
cat ${OUTPUT_FILE_1_11} ${OUTPUT_FILE_2_20} ${OUTPUT_FILE_3_21} ${LOC_FILE_3} ${OUTPUT_FILE_5_40} > ${OUTPUT_FILE}
# OM-2015-0002143 性能改善 機器提供サービス契約関連 2015/08/28 土井 MOD END
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " CAT Error($SVC cat:rc=$rc) "
    echo $JOBNAME " CAT Error($SVC cat:rc=$rc) "
    exit ${G_RTN_ERROR}
fi

# 途中で作成される .tmpファイルを削除する。それ以外は別シェルで使用するものもあるので、残す。
# OM-2016-0000285 2016/01/26 土井 DEL START
#rm -f ${OUTPUT_FILE_1_11}.tmp > /dev/null 2>&1
#rm -f ${OUTPUT_FILE_2_20}.tmp > /dev/null 2>&1
#rm -f ${OUTPUT_FILE_3_21}.tmp > /dev/null 2>&1
#rm -f ${OUTPUT_FILE_4_30}.tmp > /dev/null 2>&1
#rm -f ${OUTPUT_FILE_5_40}.tmp > /dev/null 2>&1
## 2014.03.06 OM-2013-0005000 add start
#rm -f ${OUTPUT_FILE_6_31}.tmp > /dev/null 2>&1
## 2014.03.06 OM-2013-0005000 add end
# OM-2016-0000285 2016/01/26 土井 DEL END
# OM-2015-0002143 性能改善 機器提供サービス契約関連 2015/08/28 土井 ADD START
# OM-2016-0000285 2016/01/26 土井 MOD START
#rm -f ${LOC_FILE_1}.tmp > /dev/null 2>&1
#rm -f ${LOC_FILE_2}.tmp > /dev/null 2>&1
#rm -f ${LOC_FILE_3}.tmp > /dev/null 2>&1
rm -f ${LOC_FILE_1} > /dev/null 2>&1
rm -f ${LOC_FILE_2} > /dev/null 2>&1
# OM-2016-0000285 2016/01/26 土井 MOD END
# OM-2015-0002143 性能改善 機器提供サービス契約関連 2015/08/28 土井 ADD END

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

exit ${G_RTN_NORMAL}
