#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：契約管理
#
# シェル名      ：サービス開始後紹介ＣＰ適用
#
# 機能          ：1. 紹介者情報登録対象抽出
#紹介者CPワークであるサービス開通後商品発送データ抽出項目設定作成ワークTBLからサービス開始後の紹介者向け紹介CP後付け情報を抽出し、処理対象のサービス契約番号を取得し、サービス契約番号が一致且つ、紹介コードが設定されているデータを抽出する。
#
#2. 紹介者情報登録対象出力
#抽出した情報を元にデータ抽出項目設定、データ抽出項目設定対象契約に登録する。
#また、エラーが発生した場合は紹介者情報登録エラーデータを出力する。
#
# コマンド形式  ：EO2E90110J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
#
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

#
#---業務で必要な変数定義
#
#xxx=xxxxxxx

. EOK010410J0.sh 1
SYSDATE=`echo $RSLT_SYSDATE`

LOADER_CTL_KK_T_SVOA_SHDCS_SWK=${SQL_LOADER_CTL_DIR}/KK_T_SVOA_SHDCS_SWK_01.ctl
LOAD_FILE_KK_T_SVOA_SHDCS_SWK=${MID_DIR_KK}/KK_T_SVOA_SHDCS_SWK_01.ctl
LOAD_FILE_KK_T_SVOA_SHDCS_SWK_WORK=${MID_DIR_KK}/KK_T_SVOA_SHDCS_SWK_01_WORK.ctl

LOG_FILE=${SQL_LOADER_LOG_DIR}/KK_T_SVOA_SHDCS_SWK_01_${SYSDATE}.log
BAD_FILE=${SQL_LOADER_BAD_DIR}/KK_T_SVOA_SHDCS_SWK_01_${SYSDATE}.bad

##############################################################
# 業務処理
##############################################################
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_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
}

#
# --- 各種変数の定義
#
# 更新対象レコード抽出（ファイル出力用）
KKIFM030012_FILE=${MID_DIR_KK}/KKIFM030012.csv

# 更新対象レコード抽出（マッチング、ロード処理用）
KK2891_01_DL_FILE=${MID_DIR_KK}/KK2891_01_DL.csv

# 更新対象外レコード抽出
KK2891_02_DL_FILE=${MID_DIR_KK}/KK2891_02_DL.csv

# 紹介者情報登録エラーリスト送信ファイル
KKIFE219002_FILE=${MID_DIR_KK}/KKIFE219002
KKIFE219003_FILE=${MID_DIR_KK}/KKIFE219003
KKIFE219004_FILE=${MID_DIR_KK}/KKIFE219004
KKIFE219005_FILE=${MID_DIR_KK}/KKIFE219005.csv
KKIFE219006_FILE=${MID_DIR_KK}/KKIFE219006.csv

# ワーク削除対象外レコードマッチング抽出
KK2891_03_DL_FILE=${MID_DIR_KK}/KK2891_03_DL.csv

# ワーク削除対象外レコードマージ
KK2891_04_DL_FILE=${MID_DIR_KK}/KK2891_04_DL.csv

# 出力ファイルの初期化
cat /dev/null > ${KKIFM030012_FILE}
cat /dev/null > ${KK2891_01_DL_FILE}
cat /dev/null > ${KK2891_02_DL_FILE}
cat /dev/null > ${KK2891_03_DL_FILE}
cat /dev/null > ${KK2891_04_DL_FILE}
cat /dev/null > ${KKIFE219002_FILE}
cat /dev/null > ${KKIFE219005_FILE}
cat /dev/null > ${KKIFE219006_FILE}

# アンロードクエリファイル
KK2891_ULD_QUERY=${SQL_DIR}/KK_U_KK2891_01.sql

# KK2891(KK_T_SVOA_SHDCS_SWK)の全データをアンロード
EXEC_UNLOAD ${KK2891_ULD_QUERY} ${KKIFM030012_FILE}

# アンロードクエリファイル
KK2891_ULD_QUERY=${SQL_DIR}/KK_U_KK2891_03.sql

# KK2891(KK_T_SVOA_SHDCS_SWK)の全データをアンロード
EXEC_UNLOAD ${KK2891_ULD_QUERY} ${KK2891_01_DL_FILE}

# アンロードクエリファイル
KK2891_ULD_QUERY=${SQL_DIR}/KK_U_KK2891_02.sql

# KK2891(KK_T_SVOA_SHDCS_SWK)の全データをアンロード
EXEC_UNLOAD ${KK2891_ULD_QUERY} ${KK2891_02_DL_FILE}

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

P1="OPD=$OPD,"
P2="SVCCTL=JBSbatMultiServiceControl,"
P3="JOB=EO2E90110J0,"
P4="IND1=KKIFM030.def,"
P5="INF1=${MID_DIR_KK}/KKIFM030012.csv,"
P6="IND2=,"
P7="INF2=,"
P8="OTD1=KKIFE219.def,"
P9="OTF1=${MID_DIR_KK}/KKIFE219002,"
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

#
#---ＡＰＬ起動
#

java ${JAVA_OPTION} -jar ${JAR_DIR}/koptBatch.jar $PARA

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

exit_rc=$rc

#
#---ファイルのクリア
#
cat /dev/null > ${MID_DIR_KK}/KKIFE219003

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

#
#---ＣＡＴ
#
cat ${MID_DIR_KK}/KKIFE219002 ${MID_DIR_KK}/KKIFE219001  > ${MID_DIR_KK}/KKIFE219003

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

#
#---ＳＯＲＴ
#
bsort -Tcsv -z160 -01.10asca,05.10asca -o ${MID_DIR_KK}/KKIFE219004 ${MID_DIR_KK}/KKIFE219003 

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

#
#---コピーを行う　※上書き可
#
cp -p -f ${MID_DIR_KK}/KKIFE219004 ${MID_DIR_KK}/KKIFE219001

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

# KKIFE219002に拡張子「.csv」付与
#---コピーを行う　※上書き可
#
cp -p -f ${KKIFE219002_FILE} ${KKIFE219005_FILE}

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

# KKIFE219005.csvダブルクォーテーション削除
sed -e 's/"//g' ${KKIFE219005_FILE} > ${KKIFE219006_FILE}

# 紹介者情報登録エラーリスト送信ファイル内に更新対象レコードが入っているかマッチング実行
EDIT_MATCHING_QUERY ${G_TOOLSH}/util/def/KK_CM_0435.def "${KKIFE219006_FILE} ${KK2891_01_DL_FILE}"
EXEC_MATCHING ${KK2891_03_DL_FILE} ${MATCHING_QUERY_WORK}

#
#---ワーク削除対象外レコードと、エラーとなった更新対象レコード（ワーク削除対象外となる）のマージ
#
cat ${KK2891_02_DL_FILE} ${KK2891_03_DL_FILE}  > ${KK2891_04_DL_FILE}

# 運用日付取得
. EOK010310J0.sh BDATE
OPEDATE=`echo $RSLT_OPEDATE`

# 処理ID取得
LOARD_TRN_ID="$HOSTNAME"_"$JOBNAME"_"$$"

# 変数を書き換える
sed -e "s/:TRN_ID/${LOARD_TRN_ID}/g" ${LOADER_CTL_KK_T_SVOA_SHDCS_SWK} > ${LOAD_FILE_KK_T_SVOA_SHDCS_SWK_WORK}
sed -e "s/:UNYO_YMD/${OPEDATE}/g" ${LOAD_FILE_KK_T_SVOA_SHDCS_SWK_WORK} > ${LOAD_FILE_KK_T_SVOA_SHDCS_SWK}

# ロード
sqlldr ${ORACLEUSER}/${ORACLEPASS}@${SID_S},CONTROL=${LOAD_FILE_KK_T_SVOA_SHDCS_SWK},DATA=${KK2891_04_DL_FILE},LOG=${LOG_FILE},BAD=${BAD_FILE}

rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " PROGRAM Error($SVC program:rc=$rc) "
    echo $JOBNAME " PROGRAM Error($SVC program:rc=$rc) "
    if [ $rc -ne 8 ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " LOAD Error($SVC load:rc=$rc) ログを確認してください。ログファイル：${LOG_FILE}、不良ファイル：${BAD_FILE} "
        echo $JOBNAME " LOAD Error($SVC load:rc=$rc) "
        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

exit_rc=$rc

# 各種一時ファイルの削除
rm ${LOAD_FILE_KK_T_SVOA_SHDCS_SWK}
rm ${LOAD_FILE_KK_T_SVOA_SHDCS_SWK_WORK}
rm ${KK2891_02_DL_FILE}
rm ${KK2891_03_DL_FILE}
rm ${KKIFE219002_FILE}
rm ${KKIFE219003_FILE}
rm ${KKIFE219004_FILE}
rm ${KKIFE219005_FILE}
rm ${KKIFE219006_FILE}

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

exit $exit_rc
