#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：契約管理
#
# シェル名      ：クレジット審査結果チェック
#
# 機能          ：クレジット有効性の審査結果の確認用帳票であるクレジット処理結果リストを作成するため
#必要な情報を取得してSPRiへのインタフェース情報を作成し、同時に更新対象データのリストも作成する。
#
#※異常時の運用
#　・リラン
#
# コマンド形式  ：EO2180210J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v20.00.00       2015/11/20  FJ)阪口      【ANK-2565-00-00】クレジットカード番号預かりサービス導入（Step3：預かり番号化）
# v55.00.00       2021/11/01  FJ)星野      【ANK-4069-00-00】バッチ・DBサーバーリプレース対応
# v59.00.00       2022/05/06  FJ)謝        【OM-2022-0000260】「，」を含んだ契約が有効性依頼対象に含まれない
# v58.00.00       2022/04/22  GDC)M. Gungog	【ANK-3846-00-00】【クレカ】クリアパス→ペイジェント移行
# v72.00.00    	  2024/10/21  GDC)J.Zabala  【ANK-4606-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"
  OPD=${RSLT_OPEDATE}
else
  RSLT_OPEDATE=${OPD}
fi

#
#---業務で必要な変数定義
#
YM=`echo $RSLT_OPEDATE | cut -c 1-6`

##############################################################
# 業務処理
##############################################################
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}/EOKULD03.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
}

#
# 変数の定義
#
INF_KKIFM036=${MID_DIR_KK}/KKIFM036001_${YM}.csv
# ANK-4606-00-00 MOD START
#INF_KKIFM013=${MID_DIR_KK}/KKIFM013002_${YM}.csv
INF_KKIFM972=${MID_DIR_KK}/KKIFM972001_${YM}.csv
# ANK-4606-00-00 MOD END

# ANK-3846-00-00 ADD START
# ANK-4606-00-00 MOD START
#INF_KKIFM013_LF=${MID_DIR_KK}/${JOBNAME}.KKIFM013002_${YM}_LF.csv
INF_KKIFM972_LF=${MID_DIR_KK}/${JOBNAME}.KKIFM972001_${YM}_LF.csv
# ANK-4606-00-00 MOD END
# ANK-3846-00-00 ADD END

# ANK-3846-00-00 DEL START
# EDT_CHK_FILE=${MID_DIR_KK}/${JOBNAME}.EDIT_CHK_FILE.csv
# ANK-3846-00-00 DEL END

MATCH_WORK=${MID_DIR_KK}/${JOBNAME}.MATCH_WORK
INF_WORK_01=${MID_DIR_KK}/${JOBNAME}.INF_WORK_01
INF_WORK_02=${MID_DIR_KK}/${JOBNAME}.INF_WORK_02
INF_WORK_03=${MID_DIR_KK}/${JOBNAME}.INF_WORK_03
APL_INFILE=${MID_DIR_KK}/KKIFM502001.csv

# UNLOADクエリパス（EO2130110と同一のアンロードを利用）
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

#
# データの加工処理
#

# ANK-4069-00-00対応 20211101 星野 DEL START
##
## 文字コード「SJIS」にて、awkコマンドを実行
##   ※ 固定長の「KKIFM036001」をカンマ区切りのCSVファイルへ変換
##
#
## 現在設定されている文字コードを退避
#LC_CTYPE_LOCAL=$LC_CTYPE;
#LC_COLLATE_LOCAL=$LC_COLLATE;
#
## 「KKIFM036」ファイルの文字コードである「SJIS」に切替
#export LC_CTYPE=ja_JP.SJIS
#export LC_COLLATE=ja_JP.SJIS
# ANK-4069-00-00対応 20211101 星野 DEL END

# ANK-3846-00-00 DEL START
##
## ファイルの加工
##  入力ファイルを「,」区切りで分割
##   カンマ区切りにおける「２項目（データレコード）」より以下を取得
##    0 .18.5 ：クレジット交換コード
##    1 .38.15：加盟店番号
##    2 .68.16：クレジットカード番号（※クレジットカード番号預りID）
##    3 .86.4 ：クレジット有効期限（年月）
##    4 . 2.6 ：対象年月
##    5 .13.5 ：クレジット会社コード
##    6 .84.6 ：クレジット有効期限
##    7 .90.10：請求契約番号
##    8 .100.15：クレジット名義カナ名
##    9 .115.11：送付先電話番号
##    10.150.5 ：登録クレジットカード会社コード
##    11.155.5 ：登録クレジットカード交換コード
##
## ANK-4069-00-00対応 20211101 星野 MOD START
##gawk 'BEGIN {FS=",";OFS=","}{print substr($2,18,5),substr($2,38,15),substr($2,68,16),substr($2,86,4),substr($2,7,6),substr($2,13,5),substr($2,84,6),substr($2,90,10),substr($2,100,15),substr($2,115,11),substr($2,150,5),substr($2,155,5)}' ${INF_KKIFM036} > ${EDT_CHK_FILE}
##rc=$?
##if [ $rc -ne 0 ]
##then
##    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " gawk Error($SVC gawk:rc=$rc) "
##    echo $JOBNAME " gawk Error($SVC gawk:rc=$rc) "
##    exit ${G_RTN_ERROR}
##fi
#
#TMP_FILE1=${MID_DIR_KK}/${JOBNAME}.TMP_FILE1.csv
#TMP_FILE2=${MID_DIR_KK}/${JOBNAME}.TMP_FILE2.csv
#
#iconv -f CP932 -t UTF8 ${INF_KKIFM036} -o ${TMP_FILE1}
#rc=$?
#if [ $rc -ne 0 ]
#then
#    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " iconv Error($SVC iconv:rc=$rc) "
#    echo $JOBNAME " gawk Error($SVC gawk:rc=$rc) "
#    exit ${G_RTN_ERROR}
#fi
#
#gawk 'BEGIN {FS=",";OFS=","}{print substr($2,18,5),substr($2,38,15),substr($2,68,16),substr($2,86,4),substr($2,7,6),substr($2,13,5),substr($2,84,6),substr($2,90,10),substr($2,100,15),substr($2,115,11),substr($2,150,5),substr($2,155,5)}' ${TMP_FILE1} > ${TMP_FILE2}
#rc=$?
#if [ $rc -ne 0 ]
#then
#    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " gawk Error($SVC gawk:rc=$rc) "
#    echo $JOBNAME " gawk Error($SVC gawk:rc=$rc) "
#    exit ${G_RTN_ERROR}
#fi
#
#iconv -f UTF8 -t CP932 ${TMP_FILE2} -o ${EDT_CHK_FILE}
#rc=$?
#if [ $rc -ne 0 ]
#then
#    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " iconv Error($SVC iconv:rc=$rc) "
#    echo $JOBNAME " gawk Error($SVC gawk:rc=$rc) "
#    exit ${G_RTN_ERROR}
#fi
## ANK-4069-00-00対応 20211101 星野 MOD END
# ANK-3846-00-00 DEL END

# ANK-4069-00-00対応 20211101 星野 DEL START
## 文字コードを退避していた文字コードに戻す。
#export LC_CTYPE=$LC_CTYPE_LOCAL;
#export LC_COLLATE=$LC_COLLATE_LOCAL;
# ANK-4069-00-00対応 20211101 星野 DEL END

# 審査対象月の取得
# ANK-3846-00-00 MOD START
# TARGET_MON=`gawk 'BEGIN {FS=","}NR==1{print $5}' ${EDT_CHK_FILE}`
TARGET_MON=`gawk 'BEGIN {FS=","}NR==1{print $2}' ${INF_KKIFM036}`
# ANK-3846-00-00 MOD END
if [ "${TARGET_MON}" == "" ];then
	TARGET_MON=`date -d "1 months ${RSLT_OPEDATE}" +%Y%m`
fi
echo "審査対象月：${TARGET_MON}"



# ANK-3846-00-00 ADD START
#
#--- 改行コード変換（CRLF -> LF）
#
# ANK-4606-00-00 MOD START
#tr -d '\r' < ${INF_KKIFM013} > ${INF_KKIFM013_LF}
tr -d '\r' < ${INF_KKIFM972} > ${INF_KKIFM972_LF}
# ANK-4606-00-00 MOD END
# ANK-3846-00-00 ADD START

#
# マッチング
#   INF1:${MID_DIR_KK}/KKIFM013002_${YM}.csv
#   INF2:${MID_DIR_KK}/${JOBNAME}.INF_KKIFM036.csv
#
# 0.16:INF1.顧客ＩＤ
# 1.1 : INF1.レコードＩＤ	
# 2.4 : INF1.サイトＩＤ
# 3.16 : INF1.顧客ＩＤ
# 4.18 : INF1.顧客カードＩＤ
# 5.1 : INF1.有効性判定結果
# 6.1 : INF1.カード番号更新サイン
# 7.1 : INF1.有効期限更新サイン
# 8.16 : INF1.マスクされたカード番号
# 9.4 : INF1.カード有効期限
# 10.6 : INF2.走行年月											
# 11.6 : INF2.対象年月 	
# 12.5 : INF2.クレジットカード会社コード 		
# 13.5 : INF2.クレジット交換コード		
# 14.484 : INF2.加盟店名 		
# 15.15 : INF2.加盟店番号 		
# 16.240 : INF2.加盟店略称 		
# 17.16 : INF2.クレジットカード番号 		
# 18.6 : INF2.クレジットカード有効期限 		
# 19.10 : INF2.請求契約番号 		
# 20.484 : INF2.クレジットカード名義カナ名 		
# 21.11 : INF2.送付先電話番号 		
# 22.1 : INF2.有効無効フラグ 		
# 23.16 : INF2.新クレジットカード番号		
# 24.6 : INF2.新クレジットカード有効期限 		
# 25.1 : INF2.変更識別フラグ 	
# 26.5 : INF2.登録クレジットカード会社コード 		
# 27.5 : INF2.登録クレジット交換コード
#
# ANK-3846-00-00 MOD START
# EDIT_MATCHING_QUERY ${G_TOOLSH}/util/def/KK_CM_0195.def "${INF_KKIFM013} ${EDT_CHK_FILE}"
# ANK-4606-00-00 MOD START
#EDIT_MATCHING_QUERY ${G_TOOLSH}/util/def/KK_CM_0195.def "${INF_KKIFM013_LF} ${INF_KKIFM036}"
EDIT_MATCHING_QUERY ${G_TOOLSH}/util/def/KK_CM_0195.def "${INF_KKIFM972_LF} ${INF_KKIFM036}"
# ANK-4606-00-00 MOD END
# ANK-3846-00-00 MOD END
EXEC_MATCHING ${MATCH_WORK} ${MATCHING_QUERY_WORK}

# ANK-3846-00-00 MOD START
# KKIFM013_ITEM=4.1,5.3,6.16,7.4,8.20,9.15,10.1,11.1,12.3,13.16,14.4,15.1,16.20,17.15
## OM-2022-0000260 MOD START
##KKIFM036_ITEM=18.6,19.5,20.8,21.10,22.15,23.11,14.5,25.5
#KKIFM036_ITEM=18.6,19.5,20.8,21.10,22.30,23.11,14.5,25.5
## OM-2022-0000260 MOD END
# ANK-4606-00-00 MOD START
#KKIFM013_ITEM=1.1,2.4,3.16,4.18,5.1,6.1,7.1,8.16,9.4
KKIFM972_ITEM=1.1,2.4,3.16,4.18,5.1,6.1,7.1,8.16,9.4
# ANK-4606-00-00 MOD END
KKIFM036_ITEM=10.6,11.6,12.5,13.5,14.484,15.15,16.240,17.16,18.6,19.10,20.484,21.11,22.1,23.16,24.6,25.1,26.5,27.5
# ANK-3846-00-00 MOD END

#
# ダブルクォートを削除し、マッチング情報と、KKIFM013のみの情報に切り分ける
#   ※ INF2の項目が空である場合は、KKIFM013のみのレコードとする。
#
# ANK-3846-00-00 MOD START
# bsortex -sort key="0.5asc,1.15asc,2.16asc,3.4asc" -record recform=txtcsv -input file=${MATCH_WORK} reclen=300 \
#  -output reconst="'1'.1asc,0.END" file=${INF_WORK_01} case="18.6asc.ge.' '" \
#  -output reconst="'2'.1asc,0.5,1.15,2.16,3.4,${KKIFM013_ITEM},EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY" file=${INF_WORK_02} case=other
# ANK-4606-00-00 MOD START
#bsortex -sort key="0.16asc" -record recform=txtcsv -input file=${MATCH_WORK} reclen=1428 \
#  -output reconst="'1'.1asc,0.END" file=${INF_WORK_01} case="10.6asc.ge.' '" \
#  -output reconst="'2'.1asc,0.16,${KKIFM013_ITEM},EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY" file=${INF_WORK_02} case=other
bsortex -sort key="0.16asc" -record recform=txtcsv -input file=${MATCH_WORK} reclen=1428 \
  -output reconst="'1'.1asc,0.END" file=${INF_WORK_01} case="10.6asc.ge.' '" \
  -output reconst="'2'.1asc,0.16,${KKIFM972_ITEM},EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY" file=${INF_WORK_02} case=other  
# ANK-4606-00-00 MOD END
# ANK-3846-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

#
# マッチング
#   INF1:${MID_DIR_KK}/${JOBNAME}.INF_KKIFM036.csv
#   INF2:${MID_DIR_KK}/KKIFM013002_${YM}.csv
#
# 0.16:INF1.クレジットカード番号
# 1.1 : INF2.レコードＩＤ	
# 2.4 : INF2.サイトＩＤ
# 3.16 : INF2.顧客ＩＤ
# 4.18 : INF2.顧客カードＩＤ
# 5.1 : INF2.有効性判定結果
# 6.1 : INF2.カード番号更新サイン
# 7.1 : INF2.有効期限更新サイン
# 8.16 : INF2.マスクされたカード番号
# 9.4 : INF2.カード有効期限
# 10.6 : INF1.走行年月											
# 11.6 : INF1.対象年月 	
# 12.5 : INF1.クレジットカード会社コード 		
# 13.5 : INF1.クレジット交換コード		
# 14.484 : INF1.加盟店名 		
# 15.15 : INF1.加盟店番号 		
# 16.240 : INF1.加盟店略称 		
# 17.16 : INF1.クレジットカード番号 		
# 18.6 : INF1.クレジットカード有効期限 		
# 19.10 : INF1.請求契約番号 		
# 20.484 : INF1.クレジットカード名義カナ名 		
# 21.11 : INF1.送付先電話番号 		
# 22.1 : INF1.有効無効フラグ 		
# 23.16 : INF1.新クレジットカード番号		
# 24.6 : INF1.新クレジットカード有効期限 		
# 25.1 : INF1.変更識別フラグ 	
# 26.5 : INF1.登録クレジットカード会社コード 		
# 27.5 : INF1.登録クレジット交換コード
# 
# ANK-3846-00-00 MOD START
# EDIT_MATCHING_QUERY ${G_TOOLSH}/util/def/KK_CM_0196.def "${EDT_CHK_FILE} ${INF_KKIFM013}"
# ANK-4606-00-00 MOD START
#EDIT_MATCHING_QUERY ${G_TOOLSH}/util/def/KK_CM_0196.def "${INF_KKIFM036} ${INF_KKIFM013_LF}"
EDIT_MATCHING_QUERY ${G_TOOLSH}/util/def/KK_CM_0196.def "${INF_KKIFM036} ${INF_KKIFM972_LF}"
# ANK-4606-00-00 MOD END
# ANK-3846-00-00 MOD END
EXEC_MATCHING ${MATCH_WORK} ${MATCHING_QUERY_WORK}

#
# KKIFM036のみに存在するデータを抽出
#  ※ INF2のレコードが空のものはKKIFM036のみに存在するものとする。
#
# ANK-3846-00-00 MOD START
# bsortex -sort key="0.5asc,1.15asc,2.16asc,3.4asc" -record recform=txtcsv -input file=${MATCH_WORK} reclen=300 \
# -output file=${MID_DIR_KK}/${JOBNAME}_DUST case="4.16asc.ge.' '" \
#  -output reconst="'3'.1asc,0.5,1.15,2.16,3.4,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,${KKIFM036_ITEM},EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY" file=${INF_WORK_03} case=other
bsortex -sort key="0.16asc" -record recform=txtcsv -input file=${MATCH_WORK} reclen=1428 \
  -output file=${MID_DIR_KK}/${JOBNAME}_DUST case="1.1asc.ge.' '" \
  -output reconst="'3'.1asc,0.16,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,${KKIFM036_ITEM},EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY" file=${INF_WORK_03} case=other 
# ANK-3846-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

# ワークファイルの削除
rm ${MID_DIR_KK}/${JOBNAME}_DUST

#
# アンロードクエリ変数定義
#
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

#
# UNLOAD_WORK_FIEL
#
WORK_FILE=${MID_DIR_KK}/${JOBNAME}.WORK.csv
KK0521_WORK=${MID_DIR_KK}/${JOBNAME}.KK0521_WORK.csv
KK0491_WORK=${MID_DIR_KK}/${JOBNAME}.KK0491_WORK.csv
KK0531_WORK=${MID_DIR_KK}/${JOBNAME}.KK0531_WORK.csv

# 処理対象年月の月初を取得
ULD_OPD=${TARGET_MON}01

echo "処理対象年月月初：${ULD_OPD}"

#
# 請求契約(KK0491_KK_T_SEIKY_KEI)のアンロード
# 
# KK0491(KK_T_SEIKY_KEI)の全データをアンロード
EXEC_UNLOAD ${KK0491_ULD_QUERY} ${WORK_FILE}

# 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 ：無効フラグ
KK0491_CUR=${MID_DIR_KK}/${JOBNAME}.KK0491_CUR.csv
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.'${ULD_OPD}'" < ${WORK_FILE} \
  | bsortex -merge key="0.10asc" -record recform=txtcsv -input reclen=150 -summary suppress last -output file=${KK0491_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

# KK0491の予約データ取得
#  KK0491の予約
#  - 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 ：無効フラグ
KK0491_RSV=${MID_DIR_KK}/${JOBNAME}.KK0491_RSV.csv
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.gt.'${ULD_OPD}'" < ${WORK_FILE} \
  | bsortex -merge key="0.10asc,5.8asc" -record recform=txtcsv -input reclen=150 -summary suppress last -output file=${KK0491_RSV} 

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 ${KK0491_CUR} ${KK0491_RSV} \
  |  bsortex -sort key="0.10asc,5.8asc,1.17asc" -record recform=txtcsv -input reclen=150 -output file=${KK0491_WORK}

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）の削除
#
REMOVE_FILE ${KK0491_CUR} ${KK0491_RSV}

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

# KK0521のカレントデータ取得
#  KK0521のカレント AND クレジット事業コード='2' AND 支払い審査結果コード='40'
#  - 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 ：無効フラグ
bsortex -sort key="0.12asc,1.17asc" -record recform=txtcsv -input reclen=700 include="10.1asc.eq.'0'" < ${WORK_FILE} \
  | bsortex -merge key="0.12asc" -record recform=txtcsv -input reclen=700 -summary suppress last  -output file=${KK0521_WORK}

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} "${ULD_OPD} ${ULD_OPD} ${ULD_OPD}"
EXEC_UNLOAD ${SQL_WORK_FILE} ${KK0531_WORK}

#
# 請求情報（一時ファイル）
#
SEIKY_WORK=${MID_DIR_KK}/${JOBNAME}.SEIKY_WORK

#
# マッチング
#
EDIT_MATCHING_QUERY ${G_TOOLSH}/util/def/KK_CM_0197.def "${KK0491_WORK} ${KK0521_WORK} ${KK0531_WORK}"
EXEC_MATCHING ${SEIKY_WORK} ${MATCHING_QUERY_WORK}

#
# ${INF_WORK_01}とのマッチング
#
EDIT_MATCHING_QUERY ${G_TOOLSH}/util/def/KK_CM_0198.def "${INF_WORK_01} ${SEIKY_WORK}"
EXEC_MATCHING ${MATCH_WORK} ${MATCHING_QUERY_WORK}

echo "■ ダブルクォート削除開始（`date`）"
# マッチング結果よりダブルクォートを削除し、${INF_WORK_01}へ書き戻す
sed -e 's/"//g' ${MATCH_WORK} > ${INF_WORK_01}
echo "■ ダブルクォート削除終了（`date`）"

# 請求情報（一時ファイル）の削除
rm ${SEIKY_WORK}

echo "■ マッチング結果のマージ 開始（`date`）"
#
# ファイルマージ及びソート
#  アプリの入力ファイルを作成
#   １項目：1-マッチングされた情報
#           2-KKIFM013のみの情報
#           3-KKIFM036のみの情報
#
cat /dev/null > ${APL_INFILE}
# ANK-3846-00-00 MOD START
# MARGE_KEY=1.5asc,2.15asc,3.16asc,4.4asc
SORT_KEY=1.16asc
# cat ${INF_WORK_01} ${INF_WORK_02} ${INF_WORK_03} \
#  | bsortex -sort key="${MARGE_KEY}" -record recform=txtcsv -input file=${INF_WORK_01},${INF_WORK_02},${INF_WORK_03} reclen=500 -output file=${APL_INFILE}
bsortex -sort key="${SORT_KEY}" -record recform=txtcsv -input file=${INF_WORK_01},${INF_WORK_02},${INF_WORK_03} reclen=1497 -output file=${APL_INFILE}
# ANK-3846-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
echo "■ マッチング結果のマージ 終了（`date`）"

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

echo "■ 分割起動準備（旧ファイルの削除）"
#
# ファイルの分割
#  多重で動作させる為に、ファイルを分割する。
#
SEP_CNT=5
PREFIX=KKIFM502001

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

for FILE in `find ${MID_DIR_KK} -maxdepth 1 -name "KKIFE070001_${YM}_*"`; do
	rm ${FILE}
done

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

echo "■ 分割起動準備（ファイル分割）"
FILE_REC_NUM=`cat ${APL_INFILE} | 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} ${APL_INFILE} ${MID_DIR_KK}/${PREFIX}_
	
	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 "${PREFIX}_*"`; do
		mv $FILE ${MID_DIR_KK}/${PREFIX}_0$CNT.csv
		echo "ファイル_0${CNT}："`cat ${MID_DIR_KK}/${PREFIX}_0$CNT.csv | wc -l`
		CNT=`expr $CNT + 1`
	done
else
	# 初期ファイルの生成
	cat /dev/null > ${MID_DIR_KK}/${PREFIX}_01.csv
fi

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

echo "■ 分割起動開始"
CNT=1
for filename in `find ${MID_DIR_KK} -maxdepth 1 -name "${PREFIX}_*.csv"  | sort`; do
	
	ARRAY_FILES[$CNT]=$filename
	
	#
	#---パラメタ定義
	#
	P1="OPD=$OPD,"
	P2="SVCCTL=JBSbatMultiServiceControl,"
	P3="JOB=EO2180210J0,"
	P4="IND1=KKIFM502.def,"
	P5="INF1=${filename},"
	P6="IND2=,"
	P7="INF2=,"
	P8="OTD1=KKIFE070.def,"
	P9="OTF1=${MID_DIR_KK}/KKIFE070001_${YM}_0$CNT,"
	P10="OTD2=KKIFM035.def,"
	P11="OTF2=${MID_DIR_KK}/KKIFM035002_0$CNT.csv,"
	P12="TABLENAME=,"
	P13="SQLKEY=,"
	P14="SQLPARAM=,"
	P15="ERRFILE=,"
	P16="RECOVERY=,"
	P17="BREAKPTN=,"
	P18="FREE=${TARGET_MON}"
	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}


# エラーが発生した場合は、以下の処理は行わない
if [ $exit_rc -ne 127 ]
then
	#
	# **** ファイルマージ ****
	#
	cat /dev/null > ${MID_DIR_KK}/KKIFE070001_${YM}
	for filename in `find ${MID_DIR_KK} -maxdepth 1 -name "KKIFE070001_${YM}_*"  | sort`; do
		cat ${filename} >> ${MID_DIR_KK}/KKIFE070001_${YM}
		rm ${filename}
	done

	#
	# **** ファイルマージ ****
	#
	cat /dev/null > ${MID_DIR_KK}/KKIFM035002.csv
	for filename in `find ${MID_DIR_KK} -maxdepth 1 -name "KKIFM035002_*.csv"  | sort`; do
		cat ${filename} >> ${MID_DIR_KK}/KKIFM035002.csv
		rm ${filename}
	done
	
# ANK-2565-00-00 MOD START
#	bsortex -sort key="0.10asc" -record recform=txtcsv -input file=${MID_DIR_KK}/KKIFM035002.csv reclen=578 \
#	  | bsortex -merge key="0.10asc" -record recform=txtcsv -input reclen=578 -summary suppress last -output file=${MID_DIR_KK}/KKIFM035001_${YM}.csv
	bsortex -sort key="0.10asc" -record recform=txtcsv -input file=${MID_DIR_KK}/KKIFM035002.csv reclen=582 \
	  | bsortex -merge key="0.10asc" -record recform=txtcsv -input reclen=582 -summary suppress last -output file=${MID_DIR_KK}/KKIFM035001_${YM}.csv
# ANK-2565-00-00 MOD START
	
	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 ${MID_DIR_KK}/KKIFM035002.csv
	
	for FILE in `find ${MID_DIR_KK} -maxdepth 1 -name "${PREFIX}_*.csv"`; do
		rm ${FILE}
	done
fi

#
# ファイル削除
#
# ANK-4069-00-00対応 20211101 星野 MOD START
#REMOVE_FILE ${MATCH_WORK} ${INF_WORK} ${EDT_CHK_FILE} ${INF_WORK_01} ${INF_WORK_02} ${INF_WORK_03} ${KK0521_WORK} ${KK0491_WORK} ${WORK_FILE} ${KK0531_WORK}
# ANK-3846-00-00 MOD START
# REMOVE_FILE ${MATCH_WORK} ${INF_WORK} ${EDT_CHK_FILE} ${INF_WORK_01} ${INF_WORK_02} ${INF_WORK_03} ${KK0521_WORK} ${KK0491_WORK} ${WORK_FILE} ${KK0531_WORK} ${TMP_FILE1} ${TMP_FILE2}
REMOVE_FILE ${MATCH_WORK} ${INF_WORK} ${INF_WORK_01} ${INF_WORK_02} ${INF_WORK_03} ${KK0521_WORK} ${KK0491_WORK} ${WORK_FILE} ${KK0531_WORK} ${TMP_FILE1} ${TMP_FILE2}
# ANK-3846-00-00 MOD END
# ANK-4069-00-00対応 20211101 星野 MOD END
#ANK-4606-00-00 ADD START
rm -f ${INF_KKIFM972_LF}
#ANK-4606-00-00 ADD END


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

exit $exit_rc
