#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：契約管理
#
# シェル名      ：クレジット有効性チェック要求データ抽出
#
# 機能          ：翌月請求の対象となる請求契約およびクレジットカードデータを抽出する。
#
# コマンド形式  ：EO2130110J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v20.00.00       2015/12/09  FJ)山口      【OM-2015-0003180】クレジット有効性チェックのデータ欠落について
# v20.00.01       2015/10/30  FJ)北川      【ANK-2565-00-00】クレジットカード番号預かりサービス導入（Step3：預かり番号化）
# v41.00.00       2019/02/21  FJ)原田      【ANK-3579-00-00】サービス解約後の月次有効性チェック実施対応
# v58.00.00       2022/03/15  GDC)M.Gungog      【ANK-3846-00-00】【クレカ】クリアパス→ペイジェント移行
#
##############################################################

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

#
#---ツール格納場所
#
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

##############################################################
# 業務処理
##############################################################
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
}
#
# ファイルの初期化
#
INIT_FILE()
{
	for FILE in $@
	do
		cat /dev/null > ${FILE}
	done
}

#
# ファイルの削除
#
REMOVE_FILE()
{
	for FILE in $@
	do
		rm ${FILE}
	done
}


#
#--- 処理日の取得
# 業務パラメータ（KK_YUKO_YM_SNST_PRM）にて指定された月数分運用日を進めた月の月初（01日）を取得する。
#
SQL_FILE_U_ZM0321_01=${SQL_DIR}/KK_U_ZM0321_01.sql
ZM0321_OUTFILE=${MID_DIR_KK}/${JOBNAME}.ZM0321_OUT.csv
WORK_PARAM_ID=KK_YUKO_YM_SNST_PRM
EDIT_ULD_QUERY ${SQL_FILE_U_ZM0321_01} "${RSLT_OPEDATE} ${WORK_PARAM_ID} ${RSLT_OPEDATE} ${RSLT_OPEDATE}"
EXEC_UNLOAD ${SQL_WORK_FILE} ${ZM0321_OUTFILE}

read EXECDATE_DQ < ${ZM0321_OUTFILE}

# ダブルクォーテーション削除
PROC_OPEDATE=`echo ${EXECDATE_DQ} | sed -e 's/"//g'`

rm ${ZM0321_OUTFILE}

PROC_OPEDATE=`echo ${PROC_OPEDATE} |grep -e "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"`


YM=`echo $RSLT_OPEDATE | cut -c 1-6`

#
# --- 各種変数の定義
#
ULD_OUTFILE=${MID_DIR_KK}/${JOBNAME}.ULD_TMP.csv
KK0521_CUR_OUTFILE=${MID_DIR_KK}/${JOBNAME}.KK0521_CUR.csv
KK0531_CUR_OUTFILE=${MID_DIR_KK}/${JOBNAME}.KK0531_CUR.csv
KK0531_CUR_IRAI_OUTFILE=${MID_DIR_KK}/${JOBNAME}.KK0531_IRAI_CUR.csv
KK0491_CUR_OUTFILE=${MID_DIR_KK}/${JOBNAME}.KK0491_CUR.csv
KK0321_CUR_OUTFILE=${MID_DIR_KK}/${JOBNAME}.KK0321_CUR.csv
KK0081_CUR_OUTFILE=${MID_DIR_KK}/${JOBNAME}.KK0081_CUR.csv
CH0531_CUR_OUTFILE=${MID_DIR_KK}/${JOBNAME}.CH0531_CUR.csv
MATCH_OUT_FILE=${MID_DIR_KK}/KKIFM118001.csv
KK0491_CUR_TMP1_OUTFILE=${MID_DIR_KK}/${JOBNAME}.KK0491_CUR_TMP1.csv
KK0491_CUR_TMP2_OUTFILE=${MID_DIR_KK}/${JOBNAME}.KK0491_CUR_TMP2.csv
# ANK-3579-00-00 ADD START
KK0081_CUR_OUTFILE_2=${MID_DIR_KK}/${JOBNAME}.KK0081_CUR_2.csv
KK0081_CUR_OUTFILE_3=${MID_DIR_KK}/${JOBNAME}.KK0081_CUR_3.csv
CH0051_CUR_OUTFILE=${MID_DIR_KK}/${JOBNAME}.CH0051_CUR.csv
# ANK-3579-00-00 ADD END

# 出力ファイルの初期化
INIT_FILE ${KK0521_CUR_OUTFILE} ${KK0531_CUR_OUTFILE} ${KK0531_CUR_IRAI_OUTFILE} ${KK0491_CUR_OUTFILE} ${KK0321_CUR_OUTFILE} ${KK0081_CUR_OUTFILE} ${CH0531_CUR_OUTFILE} ${MATCH_OUT_FILE} ${KK0491_CUR_TMP1_OUTFILE} ${KK0491_CUR_TMP2_OUTFILE}

# 各種アンロードクエリファイル
KK0521_ULD_QUERY=${SQL_DIR}/KK_U_KK0521_01.sql
KK0531_ULD_QUERY=${SQL_DIR}/KK_U_KK0531_01.sql
KK0491_ULD_QUERY=${SQL_DIR}/KK_U_KK0491_03.sql
KK0321_ULD_QUERY=${SQL_DIR}/KK_U_KK0321_10.sql
KK0081_ULD_QUERY=${SQL_DIR}/KK_U_KK0081_13.sql
CH0531_ULD_QUERY=${SQL_DIR}/KK_U_CH0531_01.sql
# ANK-3579-00-00 ADD START
CH0051_ULD_QUERY=${SQL_DIR}/KK_U_CH0051_05.sql
CH0501_ULD_QUERY=${SQL_DIR}/KK_U_CH0501_04.sql
TMPCH0051_ULD_QUERY=${ULD_WORK_DIR}/KK_U_CH0051_05.${JOBNAME}.tmp.sql
TMPCH0501_ULD_QUERY=${ULD_WORK_DIR}/KK_U_CH0501_04.${JOBNAME}.tmp.sql
# ANK-3579-00-00 ADD END

#
#--- 各テーブルのアンロードを実施
#
#
#--- KK0521(KK_T_CRECARD)データの編集
#

# KK0521(KK_T_CRECARD)の全データをアンロード
EXEC_UNLOAD ${KK0521_ULD_QUERY} ${ULD_OUTFILE}

# KK0521のカレントデータ取得
#  KK0521のカレント AND クレジット事業コード='2' AND 有効性確認結果区分<>'2' AND 有効性確認結果区分<>'3' AND クレジットカードステータス<>'190' AND クレジットカードステータス<>'920'
#  - SELECT(reconst)項目は以下
#      0 - 0.12 ：請求方法番号(クレジットカード)
#      1 - 1.17 ：世代登録年月日時分秒
#      2 - 3.1  ：クレジットカード事業コード
#      3 - 4.5  ：クレジットカード会社コード
#      4 - 5.16 ：クレジットカード番号預りID（※以降クレジットカード番号として扱う）
#      5 - 6.6  ：クレジットカード有効期限
#      6 - 7.5  ：クレジット交換コード
#      7 - 9.242：クレジットカード名義カナ名
#      8 - 15.2 ：支払い審査結果コード
#      9 - 26.6 ：クレジットカード無効年月
#     10 - 34.1 ：無効フラグ
#     11 - 22.1 ：有効性確認結果区分
#     12 - 2.3  ：クレジットカードステータス
#     13 - 20.5 ：仕向先会社コード
#ANK-2565-00-00 MOD START
#bsortex -sort key="0.12asc,1.17asc" -record recform=txtcsv -input reclen=700 include="10.1asc.eq.'0'" < ${ULD_OUTFILE} \
#  | bsortex -merge key="0.12asc" -record recform=txtcsv -input reclen=700 -summary suppress last \
#  | bsortex -sort key="4.64asc" -record recform=txtcsv -input reclen=700 include="2.1asc.eq.'2'.and.11.1asc.ne.'2'.and.11.1asc.ne.'3'.and.12.3asc.ne.'190'.and.12.3asc.ne.'920'" -output file=${KK0521_CUR_OUTFILE}
bsortex -sort key="0.12asc,1.17asc" -record recform=txtcsv -input reclen=700 include="10.1asc.eq.'0'" < ${ULD_OUTFILE} \
  | bsortex -merge key="0.12asc" -record recform=txtcsv -input reclen=700 -summary suppress last \
  | bsortex -sort key="4.16asc" -record recform=txtcsv -input reclen=700 include="2.1asc.eq.'2'.and.11.1asc.ne.'2'.and.11.1asc.ne.'3'.and.12.3asc.ne.'190'.and.12.3asc.ne.'920'" -output file=${KK0521_CUR_OUTFILE}
#ANK-2565-00-00 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

#
#--- KK0531(KK_M_CRECARD_COMP)データの編集
#
# KK0531(KK_M_CRECARD_COMP)の全データをアンロード
EDIT_ULD_QUERY ${KK0531_ULD_QUERY} "${PROC_OPEDATE} ${PROC_OPEDATE} ${PROC_OPEDATE}"
EXEC_UNLOAD ${SQL_WORK_FILE} ${KK0531_CUR_OUTFILE}

# 有効性依頼区分='1'のデータを取得する。
bsortex -sort key="0.5asc" -record recform=txtcsv -input reclen=700 include="3.1asc.eq.'1'" -output file=${KK0531_CUR_IRAI_OUTFILE} < ${KK0531_CUR_OUTFILE}

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

#
#--- KK0491(KK_T_SEIKY_KEI)データの編集
#
# KK0491(KK_T_SEIKY_KEI)の全データをアンロード
EXEC_UNLOAD ${KK0491_ULD_QUERY} ${ULD_OUTFILE}

# KK0491のカレントデータ取得
#  KK0491のカレント AND 請求方法コード='4'
#  - SELECT(reconst)項目は以下
#      0 - 0.10 ：請求契約番号
#      1 - 1.17 ：世代登録年月日時分秒
#      2 - 6.1  ：請求方法コード
#      3 - 16.12：請求方法番号(クレジットカード)
#      4 - 37.11：送付先電話番号
#      5 - 44.8 ：予約適用年月日
#      6 - 46.1 ：予約適用コード
#      7 - 58.1 ：無効フラグ
bsortex -sort key="0.10asc,5.8asc,1.17asc" -record recform=txtcsv -input reclen=150 include="7.1asc.eq.'0'.and.6.1asc.eq.'2'.and.5.8asc.le.'${PROC_OPEDATE}'" < ${ULD_OUTFILE} \
  | bsortex -merge key="0.10asc" -record recform=txtcsv -input reclen=150 -summary suppress last \
  | bsortex -sort key="0.10asc" -record recform=txtcsv -input reclen=150 include="2.1asc.eq.'4'" -output file=${KK0491_CUR_TMP1_OUTFILE}

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


#===================================================================
# 運用日当日での断面で請求契約情報を取得

# KK0491のカレントデータ取得
#  KK0491のカレント AND 請求方法コード='4'
#  - SELECT(reconst)項目は以下
#      0 - 0.10 ：請求契約番号
#      1 - 1.17 ：世代登録年月日時分秒
#      2 - 6.1  ：請求方法コード
#      3 - 16.12：請求方法番号(クレジットカード)
#      4 - 37.11：送付先電話番号
#      5 - 44.8 ：予約適用年月日
#      6 - 46.1 ：予約適用コード
#      7 - 58.1 ：無効フラグ
bsortex -sort key="0.10asc,5.8asc,1.17asc" -record recform=txtcsv -input reclen=150 include="7.1asc.eq.'0'.and.6.1asc.eq.'2'.and.5.8asc.le.'${RSLT_OPEDATE}'" < ${ULD_OUTFILE} \
  | bsortex -merge key="0.10asc" -record recform=txtcsv -input reclen=150 -summary suppress last \
  | bsortex -sort key="0.10asc" -record recform=txtcsv -input reclen=150 include="2.1asc.eq.'4'" -output file=${KK0491_CUR_TMP2_OUTFILE}

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


#運用日当日の結果をNヶ月後初日の結果に追加
cat ${KK0491_CUR_TMP2_OUTFILE} >> ${KK0491_CUR_TMP1_OUTFILE}

# 運用日のNヶ月後初日の結果と運用日当日の結果をマージし、有効なレコードを残す
bsortex -sort key="0.10asc,5.8asc,1.17asc" -record recform=txtcsv -input reclen=150 < ${KK0491_CUR_TMP1_OUTFILE} \
  | bsortex -merge key="0.10asc" -record recform=txtcsv -input reclen=150 -summary suppress last \
  -output file=${KK0491_CUR_OUTFILE} 



#===================================================================

#
#--- KK0321(KK_T_KAKINS)データの編集
#
# KK0321(KK_T_KAKINS)の全データをアンロード
EXEC_UNLOAD ${KK0321_ULD_QUERY} ${ULD_OUTFILE}

# KK0321の有効データ取得
#  KK0321の有効なデータ（適用期間内）
bsortex -sort key="2.10asc,1.10asc" -record recform=txtcsv -input reclen=55 include="4.1asc.eq.'0'.and.2.8asc.le.'${PROC_OPEDATE}'.and.3.8asc.ge.'${PROC_OPEDATE}'" -output file=${KK0321_CUR_OUTFILE} < ${ULD_OUTFILE}

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

#
#--- KK0081(KK_T_SVC_KEI)データの編集
#
# KK0081(KK_T_SVC_KEI)の全データをアンロード
EXEC_UNLOAD ${KK0081_ULD_QUERY} ${ULD_OUTFILE}

# KK0081のカレントデータ取得
#  KK0081のカレント AND サービス契約ステータス IN ('100', '210',  '030') OR (サービス契約ステータス='020' AND 照査解約完了コード='1')
#  - SELECT(reconst)項目は以下
#      0 - 0.10 ：サービス契約番号
#      1 - 1.17 ：世代登録年月日時分秒
#      2 - 2.3  ：サービス契約ステータス
#      3 - 33.1 ：予約適用年月日
#      4 - 35.1 ：予約適用コード
#      5 - 96.1 ：無効フラグ
#      6 - 80.1 ：照査解約完了コード
#      7 - 59.8 ：サービス解約起算年月日(YYYYMM形式に変換)
#      8 - 40.8 ：サービス課金開始年月日
bsortex -sort key="0.10asc,3.8asc,1.17asc" -record recform=txtcsv -input reclen=100 include="5.1asc.eq.'0'.and.4.1asc.eq.'2'.and.3.8asc.le.'${PROC_OPEDATE}'" < ${ULD_OUTFILE} \
  | bsortex -merge key="0.10asc" -record recform=txtcsv -input reclen=100 -summary suppress last \
  | bsortex -sort key="0.10asc" -record recform=txtcsv -input reclen=100 include="2.3asc.eq.'100'.or.2.3asc.eq.'210'.or.2.3asc.eq.'030'.or.(2.3asc.eq.'020'.and.6.1asc.eq.'1')" -output file=${KK0081_CUR_OUTFILE}

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
# ANK-3579-00-00 ADD START
# 運用日付の6ヶ月前を取得
YM2=`date --date "${RSLT_OPEDATE} 6 month ago" +%Y%m`

#  KK0081のカレント AND サービス契約ステータス = '910' AND サービス解約起算年月日 >= 運用日付の6ヶ月前
#  - SELECT(reconst)項目は以下
#      0 - 0.10 ：サービス契約番号
#      1 - 1.17 ：世代登録年月日時分秒
#      2 - 2.3  ：サービス契約ステータス
#      3 - 33.1 ：予約適用年月日
#      4 - 35.1 ：予約適用コード
#      5 - 96.1 ：無効フラグ
#      6 - 80.1 ：照査解約完了コード
#      7 - 59.6 ：サービス解約起算年月日(YYYYMM形式に変換済み)
#      8 - 40.8 ：サービス課金開始年月日
bsortex -sort key="0.10asc,3.8asc,1.17asc" -record recform=txtcsv -input reclen=100 include="5.1asc.eq.'0'.and.4.1asc.eq.'2'.and.3.8asc.le.'${PROC_OPEDATE}'" < ${ULD_OUTFILE} \
  | bsortex -merge key="0.10asc" -record recform=txtcsv -input reclen=100 -summary suppress last \
  | bsortex -sort key="0.10asc" -record recform=txtcsv -input reclen=100 -output file=${KK0081_CUR_OUTFILE_2} case="2.3asc.eq.'910'.and.7.6asc.ge.'${YM2}'.and.8.8asc.gt.'0'" \
  -output file=${KK0081_CUR_OUTFILE_3} case="2.3asc.eq.'910'.and.7.6asc.gt.'0'.and.8.8asc.gt.'0'"

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 ${CH0501_ULD_QUERY} > ${TMPCH0501_ULD_QUERY}
sed -i, -e 0,/?/s/?/"'"${RSLT_OPEDATE}"'"/ ${TMPCH0501_ULD_QUERY}

#
#--- CH0501(CH_M_PRC_SCHDL_TEIGI)データの編集
#
# CH0051(CH_M_PRC_SCHDL_TEIGI)のデータをアンロード
EXEC_UNLOAD ${TMPCH0501_ULD_QUERY} ${ULD_OUTFILE}

# 取得した請求年月を格納
sed -i -e "s/\"//g" ${ULD_OUTFILE}
SEIKY_YM=`cat ${ULD_OUTFILE}`

#
#--- バインド変数設定処理
#
cat ${CH0051_ULD_QUERY} > ${TMPCH0051_ULD_QUERY}
sed -i, -e 0,/?/s/?/"'"${SEIKY_YM}"'"/ ${TMPCH0051_ULD_QUERY}

#
#--- CH0051(CH_T_SEIKY)データの編集
#
# CH0051(CH_T_SEIKY)のデータをアンロード
EXEC_UNLOAD ${TMPCH0051_ULD_QUERY} ${ULD_OUTFILE}
# CH0051のデータ取得
bsortex -sort key="0.10asc" -record recform=txtcsv -input reclen=23 include="1.3asc.eq.'020'.and.2.1asc.eq.'0'" -output file=${CH0051_CUR_OUTFILE} < ${ULD_OUTFILE}

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_2=${MID_DIR_KK}/${JOBNAME}.MATCH_TMP_2.csv

# マッチング実行
EDIT_MATCHING_QUERY ${G_TOOLSH}/util/def/KK_CM_0688.def "${KK0321_CUR_OUTFILE} ${KK0081_CUR_OUTFILE_3} ${CH0051_CUR_OUTFILE}"
EXEC_MATCHING ${MATCH_TMP_OUT_FILE_2} ${MATCHING_QUERY_WORK}

# 取得ファイルをマージ
cat ${MATCH_TMP_OUT_FILE_2} >> ${KK0081_CUR_OUTFILE_2}

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

# マージしたファイルを、サービス契約の元のファイルにマージ
cat ${KK0081_CUR_OUTFILE_2} >> ${KK0081_CUR_OUTFILE}

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

# マッチング（一時）データの削除
rm ${MATCH_TMP_OUT_FILE_2}
# ANK-3579-00-00 ADD END

# ANK-2565-00-00 DEL START
##
##--- CH0531(CH_M_CRECA_TAIIKI)データの編集
##
#
## CH0531(CH_M_CRECA_TAIIKI)の全データをアンロード
#EDIT_ULD_QUERY ${CH0531_ULD_QUERY} "${PROC_OPEDATE} ${PROC_OPEDATE} ${PROC_OPEDATE}"
#EXEC_UNLOAD ${SQL_WORK_FILE} ${CH0531_CUR_OUTFILE}
# ANK-2565-00-00 DEL END

#
#---マッチング処理
#
MATCH_TMP_OUT_FILE=${MID_DIR_KK}/${JOBNAME}.MATCH_TMP.csv

# マッチング実行
# 帯域マスタ（CH0531）以外はマッチング処理にて結合する。
EDIT_MATCHING_QUERY ${G_TOOLSH}/util/def/KK_CM_0022.def "${KK0321_CUR_OUTFILE} ${KK0081_CUR_OUTFILE} ${KK0491_CUR_OUTFILE} ${KK0521_CUR_OUTFILE} ${KK0531_CUR_IRAI_OUTFILE}"
EXEC_MATCHING ${MATCH_TMP_OUT_FILE} ${MATCHING_QUERY_WORK}

# マッチングにて増幅したデータの削除（重複行削除）
#   課金先の紐付けにより、請求に紐付くサービス契約をがJOINされるため、データが増殖する。
bsortex -sort key="0.12asc" -record recform=txtcsv -input reclen=700 <${MATCH_TMP_OUT_FILE} \
  | bsortex -merge key="0.12asc" -record recform=txtcsv -input reclen=700 -summary suppress last -output file=${MATCH_OUT_FILE}

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

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

# unloadファイルの削除
rm ${ULD_OUTFILE}

# ******************** 分割起動の準備 ********************

# 前月実行分(バッチ実行時点にて存在しているファイル)のファイルを削除
for FILE in `find ${MID_DIR_KK} -maxdepth 1 -name "KKIFM036001_*.csv"`; do
	rm -f ${FILE}
done

# ANK-2565-00-00 DEL START 
#for FILE in `find ${MID_DIR_KK} -maxdepth 1 -name "KKL04401_*.csv"`; do
#	rm -f ${FILE}
#done
# ANK-2565-00-00 DEL END 

#
# ファイルの分割
#  多重で動作させる為に、ファイルを分割する。
#
SEP_CNT=5

# 一時ファイルの削除
for FILE in `find ${MID_DIR_KK} -maxdepth 1 -name "KKIFM118001_*.csv"`; do
	rm -f ${FILE}
done

for FILE in `find ${MID_DIR_KK} -maxdepth 1 -name "KKIFM117002_*.csv"`; do
	rm -f ${FILE}
done

FILE_REC_NUM=`cat ${MATCH_OUT_FILE} | wc -l`

if [ ${FILE_REC_NUM} -ne 0 ]
then
	echo "■ 入力ファイル分割実行(全行数：${FILE_REC_NUM})"
	
	# 分割行数：入力ファイル件数(余剰分は削除) / 5 + 入力ファイル件数/5の余剰分
	FILE_SEP_CNT=`expr ${FILE_REC_NUM} / ${SEP_CNT} + ${FILE_REC_NUM} % ${SEP_CNT}`
	
	echo "分割行数：${FILE_SEP_CNT}"
	
	split -l ${FILE_SEP_CNT} ${MATCH_OUT_FILE} ${MID_DIR_KK}/KKIFM118001_
	
	rc=$?
	if [ $rc -ne 0 ]
	then
	    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " split Error($SVC split:rc=$rc) "
	    echo $JOBNAME " split Error($SVC split:rc=$rc) "
	    exit ${G_RTN_ERROR}
	fi
	
	# 分割後のファイル名をリネーム
	CNT=1
	for FILE in `find ${MID_DIR_KK} -maxdepth 1 -name "KKIFM118001_*"`; do
		mv $FILE ${MID_DIR_KK}/KKIFM118001_0$CNT.csv
		echo "ファイル_0${CNT}："`cat ${MID_DIR_KK}/KKIFM118001_0$CNT.csv | wc -l`
		CNT=`expr $CNT + 1`
	done
else
	# 初期ファイルの生成
	cat /dev/null > ${MID_DIR_KK}/KKIFM118001_01.csv
fi

sh ${G_TOOLSH}/EOK010210J0.sh CS00027I $JOBNAME

CNT=1
for filename in `find ${MID_DIR_KK} -maxdepth 1 -name "KKIFM118001_*.csv"  | sort`; do
	
	ARRAY_FILES[$CNT]=$filename
	
	#
	#---パラメタ定義
	#
	P1="OPD=$OPD,"
	P2="SVCCTL=JBSbatMultiServiceControl,"
	P3="JOB=EO2130110J0,"
	P4="IND1=KKIFM118.def,"
	P5="INF1=${filename},"
	P6="IND2=,"
	P7="INF2=,"
# ANK-2565-00-00 MOD START
#	P8="OTD1=KKIFM116.def,"
#	P9="OTF1=${MID_DIR_KK}/KKL04401_${YM}_$CNT.csv,"
#	P10="OTD2=KKIFM117.def,"
#	P11="OTF2=${MID_DIR_KK}/KKIFM117002_$CNT.csv,"
	P8="OTD1=KKIFM117.def,"
	P9="OTF1=${MID_DIR_KK}/KKIFM117002_$CNT.csv,"
	P10="OTD2=,"
	P11="OTF2=,"
# ANK-2565-00-00 MOD END
	P12="TABLENAME=,"
	P13="SQLKEY=,"
	P14="SQLPARAM=,"
	P15="ERRFILE=,"
	P16="RECOVERY=,"
	P17="BREAKPTN=,"
	P18="FREE=${PROC_OPEDATE};${CH0531_CUR_OUTFILE};$CNT;${KK0531_CUR_OUTFILE};KKIFM117.def;${MID_DIR_KK}/KKIFM117004.csv"
	PARA="$P1$P2$P3$P4$P5$P6$P7$P8$P9$P10$P11$P12$P13$P14$P15$P16$P17$P18"

	#
	#---ＡＰＬ起動
	#
	java ${JAVA_OPTION} -jar ${JAR_DIR}/koptBatch.jar $PARA &
	
	PID=$!
	ARRAY_PID[$CNT]=$PID
	
	echo "処理対象ファイル：$filename @$PID"
	
	CNT=`expr $CNT + 1`
done

# 処理終了監視
RESULT=0
for PID in "${ARRAY_PID[@]}"; do
	
	wait $PID
	
	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
	
	echo "PID($PID) => エラーコード：$rc"
	
	# 処理結果の設定（処理結果コードの最大を残す）
	if [ ${RESULT} -lt $rc ]
	then
		RESULT=$rc
	fi
done 

exit_rc=${RESULT}

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

# エラーが発生した場合は、以下の処理は行わない
if [ $exit_rc -ne 127 ]
then

	#
	# **** ファイルマージ ****
	#
# ANK-2565-00-00 DEL START
#	# カード会社エラーファイル
#	cat /dev/null > ${MID_DIR_KK}/KKL04401_${YM}.csv
#	for filename in `find ${MID_DIR_KK} -maxdepth 1 -name "KKL04401_${YM}_*.csv"  | sort`; do
#		cat ${filename} >> ${MID_DIR_KK}/KKL04401_${YM}.csv
#		rm ${filename}
#	done
#	
#	# ヘッダ行を追加する
#	if [ `cat ${MID_DIR_KK}/KKL04401_${YM}.csv | wc -l` -ne 0 ]
#	then
#		echo "請求契約番号,クレジットカード番号" > ${MID_DIR_KK}/${JOBNAME}.KKL04401_HEAD.csv
#		mv ${MID_DIR_KK}/KKL04401_${YM}.csv ${MID_DIR_KK}/${JOBNAME}.KKL04401_${YM}.csv
#		
#		cat ${MID_DIR_KK}/${JOBNAME}.KKL04401_HEAD.csv ${MID_DIR_KK}/${JOBNAME}.KKL04401_${YM}.csv > ${MID_DIR_KK}/KKL04401_${YM}.csv
#		
#		rm ${MID_DIR_KK}/${JOBNAME}.KKL04401_HEAD.csv
#		rm ${MID_DIR_KK}/${JOBNAME}.KKL04401_${YM}.csv
#	fi
# ANK-2565-00-00 DEL END

	# 処理結果をマージする
	cat /dev/null > ${MID_DIR_KK}/KKIFM117002.csv
	for filename in `find ${MID_DIR_KK} -maxdepth 1 -name "KKIFM117002_*.csv"  | sort`; do
		cat ${filename} >> ${MID_DIR_KK}/KKIFM117002.csv
		rm ${filename}
	done
#	ANK-3846-00-00 DEL START
#	#
#	# 未出力のクレジット会社を設定する。
#	#
#
#	# 出力済クレジット会社コード
#	WORK_FILE=${MID_DIR_KK}/${JOBNAME}.WORK.csv
#	# 出力済みのクレジット会社コードを取得
#	bsortex -sort key="2.5asc,7.16asc" -record recform=txtcsv -input reclen=1500 < ${MID_DIR_KK}/KKIFM117002.csv \
#		| bsortex -merge key="2.5asc" -record recform=txtcsv -input reclen=1340 -summary suppress first -output reconst="2.5" file=${WORK_FILE}
#
#	#
#	# KKIFM117004.csv(クレジット会社マスタ出力ファイル)より、出力済みのカード会社コード分を除外し、KKIFM117003へとマージする。
#	#
#	cat /dev/null > ${MID_DIR_KK}/KKIFM117003.csv
#	if [ `cat ${WORK_FILE} | wc -l` -ne 0 ]
#	then
#		# 出力済み情報が存在する場合、クレジット会社マスタ情報(KKIFM117004)より、出力済み分を削除し、マージする。
#		cp -p ${MID_DIR_KK}/KKIFM117002.csv ${MID_DIR_KK}/KKIFM117003.csv
#		
#		# KKIFM117004のみに存在する情報に絞りこみ、KKIFM117003.csvにマージ
#		awk 'BEGIN {FS=",";
#		            base_file=ARGV[1];
#		            diff_file=ARGV[2];
#		            while(getline < diff_file > 0) { diff_array[i++]=$0; }
#		            close(diff_file);
#		            while (getline < base_file > 0) {
#		              flg=0;
#		              for (i in diff_array) {
#		                if ($3 == diff_array[i]) { flg=1; break; }
#		              }
#		              if (flg==0) { print $0;  }
#		            }
#		            close(base_file);
#		           }' ${MID_DIR_KK}/KKIFM117004.csv ${MID_DIR_KK}/EO2130110J0.WORK.csv >> ${MID_DIR_KK}/KKIFM117003.csv
#	else
#		# 出力済み情報が存在しない場合、クレジット会社マスタの情報のみで処理を行う。
#		cp -p ${MID_DIR_KK}/KKIFM117004.csv ${MID_DIR_KK}/KKIFM117003.csv
#	fi
#	
#	# 一時ファイルの削除
#	rm ${WORK_FILE}
#	ANK-3846-00-00 DEL END
#	ANK-3846-00-00 ADD START
	cp -p ${MID_DIR_KK}/KKIFM117002.csv ${MID_DIR_KK}/KKIFM117003.csv
#	ANK-3846-00-00 DEL END
	
# OM-2015-0003180 ADD START
	#
	#--業務パラメータ管理から取引がないクレジットカード交換コード取得
	#
	# ZM0321(ZM_M_WORK_PARAM_KNRI)からKK_UNUSED_CRECARDで始まる業務パラメータIDが設定されている業務パラメータ設定値をクレジットカード交換コード順で取得する
	#
	ZM0321_UNUSED_CRECARD_OUTFILE=${MID_DIR_KK}/${JOBNAME}.ZM0321_UNUSED_CRECARD.csv
	SQL_FILE_U_ZM0321_08=${SQL_DIR}/KK_U_ZM0321_08.sql
	EDIT_ULD_QUERY ${SQL_FILE_U_ZM0321_08} "${RSLT_OPEDATE} ${RSLT_OPEDATE}"
	EXEC_UNLOAD ${SQL_WORK_FILE} ${ZM0321_UNUSED_CRECARD_OUTFILE}
	#
	#--ダブルクォーテーションを除去
	#
	sed -i -e "s/\"//g" ${ZM0321_UNUSED_CRECARD_OUTFILE}
	
	#
	#--KKIFM117003をクレジットカード交換コードでソート
	#
	KKIFM117003_SORT_TMP1_OUTFILE=${MID_DIR_KK}/${JOBNAME}.KKIFM117003_SORT_TMP1.csv
	bsortex -sort key="3.5asc" -record recform=txtcsv -input reclen=700 -output file=${KKIFM117003_SORT_TMP1_OUTFILE} < ${MID_DIR_KK}/KKIFM117003.csv
	rc=$?
	if [ $rc -ne 0 ]
	then
	    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " KKIFM117003 SORT Error($SVC sort:rc=$rc) "
	    echo $JOBNAME " KKIFM117003 SORT Error($SVC sort:rc=$rc) "
	    exit ${G_RTN_ERROR}
	fi
	
	#
	#--KKIFM117003と取引がないクレジットカード交換コードをクレジットカード交換コードでマッチングし、マッチしたレコード以外を出力
	#
	KKIFM117003_MATCH_TMP1_OUTFILE=${MID_DIR_KK}/${JOBNAME}.KKIFM117003_MATCH_TMP1.csv
	EDIT_MATCHING_QUERY ${G_TOOLSH}/util/def/KK_CM_0577.def "${KKIFM117003_SORT_TMP1_OUTFILE} ${ZM0321_UNUSED_CRECARD_OUTFILE}"
	EXEC_MATCHING ${KKIFM117003_MATCH_TMP1_OUTFILE} ${MATCHING_QUERY_WORK}
# OM-2015-0003180 ADD END
	
	# 出力ファイルのソート
# OM-2015-0003180 MOD START
#	bsortex -sort key="3.5asc,7.16asc,8.6asc" -record recform=txtcsv -input reclen=1500 -output file=${MID_DIR_KK}/KKIFM117001_${YM}.csv < ${MID_DIR_KK}/KKIFM117003.csv
#	ANK-3846-00-00 MOD START
#	bsortex -sort key="3.5asc,7.16asc,8.6asc" -record recform=txtcsv -input reclen=1500 -output file=${MID_DIR_KK}/KKIFM117001_${YM}.csv < ${KKIFM117003_MATCH_TMP1_OUTFILE}
	bsortex -sort key="7.16asc" -record recform=txtcsv -input reclen=1340 -output file=${MID_DIR_KK}/KKIFM036001_${YM}.csv < ${KKIFM117003_MATCH_TMP1_OUTFILE}
#	ANK-3846-00-00 MOD END
# OM-2015-0003180 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
	
# ANK-2565-00-00 DEL START
#	# カード会社エラーファイルが存在する場合は、マイナーアラームを出力する。
#	if [ `cat ${MID_DIR_KK}/KKL04401_${YM}.csv | wc -l` -ne 0 ]
#	then
#		
#	    sh ${G_TOOLSH}/EOK010210J0.sh CS00003W $JOBNAME "カード会社エラーファイルを出力しました。（${MID_DIR_KK}/KKL04401_${YM}.csv） "
#	    echo $JOBNAME "カード会社エラーファイルを出力しました。（${MID_DIR_KK}/KKL04401_${YM}.csv） "
#	fi
# ANK-2565-00-00 DEL END
fi

# 各種一時ファイルの削除
REMOVE_FILE ${KK0521_CUR_OUTFILE} ${KK0531_CUR_OUTFILE} ${KK0531_CUR_IRAI_OUTFILE} ${KK0491_CUR_OUTFILE} ${KK0321_CUR_OUTFILE} ${KK0081_CUR_OUTFILE} ${CH0531_CUR_OUTFILE} ${KK0491_CUR_TMP1_OUTFILE} ${KK0491_CUR_TMP2_OUTFILE}
# OM-2015-0003180 ADD START
REMOVE_FILE ${ZM0321_UNUSED_CRECARD_OUTFILE} ${KKIFM117003_SORT_TMP1_OUTFILE} ${KKIFM117003_MATCH_TMP1_OUTFILE}
# OM-2015-0003180 ADD END
# ANK-3579-00-00 ADD START
REMOVE_FILE ${KK0081_CUR_OUTFILE_2} ${KK0081_CUR_OUTFILE_3} ${CH0051_CUR_OUTFILE} ${TMPCH0501_ULD_QUERY} ${TMPCH0051_ULD_QUERY}
# ANK-3579-00-00 ADD END

sh ${G_TOOLSH}/EOK010210J0.sh CS00026I $JOBNAME
exit $exit_rc
