#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：契約管理
#
# シェル名      ：ＣＴＩ電話番号情報（問合せ客）抽出
#
# 機能          ：基準日以降に更新／追加の発生したお客さま情報(電話番号情報)をePOPに連携する。
#フリー項目で年月日が指定された場合は、指定された年月日を基準日としたデータ抽出も可能とする。(リカバリ時)
#
# コマンド形式  ：EO21Y0310J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v4.00          2013/01/30   FJ)井熊      【KT1-2013-0000126】お客様スキーマが外部結合する対応とアンローダ化
# v5.00          2013/02/18   FJ)藤原      【ANK-1457-00-00】  オープン／ファミリー会員の抽出を追加
# v5.01          2013/02/22   FJ)藤原      【ANK-1419-00-00】  マスタ会員(050IP電話アプリ契約者)の抽出を追加
# v20.00.00      2015/12/15   FJ)藤本      【OM-2015-0003274】アンロード処理のバックグラウンド実行を廃止
#
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

#
#---業務で必要な変数定義
#
OUT_MID_FILE=${MID_DIR_KK}/KKIFM327001.csv
# 運用日付取得
. EOK010310J0.sh "BDATE"
RECOVERY_YMD=$1
LOOP=4
##############################################################
# 業務処理
##############################################################
sh ${G_TOOLSH}/EOK010210J0.sh CS00025I $JOBNAME

#
#--- ファイル定義
#
# アンロード用SQLファイル
SQLFILE[0]=${SQL_DIR}/CK_U_CK0051_01.sql
SQLFILE[1]=${SQL_DIR}/KK_U_CK0011_02.sql
SQLFILE[2]=${SQL_DIR}/KK_U_CK0201_01.sql
SQLFILE[3]=${SQL_DIR}/KK_U_CK0011_03.sql
# 運用日埋め込み用SQLファイル
SQLFILE_TEMP[0]=${SQL_DIR}/CK_U_CK0051_01_temp.sql
SQLFILE_TEMP[1]=${SQL_DIR}/KK_U_CK0011_02_temp.sql
SQLFILE_TEMP[2]=${SQL_DIR}/KK_U_CK0201_01_temp.sql
SQLFILE_TEMP[3]=${SQL_DIR}/KK_U_CK0011_03_temp.sql
# 一時出力ファイル
OUTFILE[0]=${MID_DIR_KK}/KKIFM326_temp1.csv
OUTFILE[1]=${MID_DIR_KK}/KKIFM326_temp2.csv
OUTFILE[2]=${MID_DIR_KK}/KKIFM326_temp3.csv
OUTFILE[3]=${MID_DIR_KK}/KKIFM326_temp4.csv
# 一時出力ファイルソート後
# お客様(オープン／ファミリー会員)から抽出したファイルをSYSIDの昇順にソート済の一時ファイル
OUTFILE_2_SYSID_SORT=${MID_DIR_KK}/KKIFM326_temp2_sysid_sort.csv
# 連絡先から抽出したファイルをSYSIDの昇順にソート済の一時ファイル
OUTFILE_3_SYSID_SORT=${MID_DIR_KK}/KKIFM326_temp3_sysid_sort.csv
# SYSIDでソート済のお客様(オープン／ファミリー会員)と連絡先をマージ(重複削除)済の一時ファイル
OUTFILE_23_MARGE=${MID_DIR_KK}/KKIFM326_temp23_marge.csv
# お客様(オープン／ファミリー会員)と連絡先をマージしたファイルを抽出元特定用識別コードの昇順にソート済の一時ファイル
OUTFILE_23_MARGE_SKCD_SORT=${MID_DIR_KK}/KKIFM326_temp23_marge_skcd_sort.csv
# 問合せ客から抽出したファイルを抽出元特定用識別コードの昇順にソート済の一時ファイル
OUTFILE_1_SKCD_SORT=${MID_DIR_KK}/KKIFM326_temp1_skcd_sort.csv
# お客様(マスタ会員)から抽出したファイルを抽出元特定用識別コードの昇順にソート済の一時ファイル
OUTFILE_4_SKCD_SORT=${MID_DIR_KK}/KKIFM326_temp4_skcd_sort.csv
# 一時出力ファイルソート後1～LOOPをマージしたファイル
INFILE_TEMP=${MID_DIR_KK}/KKIFM326_temp.csv
# UTF-8に変換した処理データファイル
INFILE=${MID_DIR_KK}/KKIFM326001.csv

# forでアンロード実行までくくってしまうと、もし2周目以降でエラーとなった場合に
# それぞれゴミファイルが残ったまま終了してしまう可能性があるので、別々のループで実行する
for (( i=0; i<LOOP; i++));
do
    #
    #--- 各ファイルの存在チェックを行う
    #
    if [ ! -r ${SQLFILE[${i}]} ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${SQLFILE[${i}]}) "
        echo $JOBNAME " File is nonexist(${SQLFILE[${i}]}) "
        exit ${G_RTN_ERROR}
    fi
done

for (( i=0; i<LOOP; i++));
do
    #
    #--- アンロードファイルのクリアを行う
    #
    cat /dev/null > ${OUTFILE[${i}]}
    
    rc=$?
    if [ $rc -ne 0 ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File cat error(${OUTFILE[${i}]}:rc=$rc) "
        echo $JOBNAME " File cat error(${OUTFILE[${i}]}:rc=$rc) "
        exit ${G_RTN_ERROR}
    fi
done

for (( i=0; i<LOOP; i++));
do
    #
    #--- 運用日埋め込み用SQLファイル作成
    #
    if [ -n "${RECOVERY_YMD}" ];
    then
      sed s/?/"'"$RECOVERY_YMD"'"/g ${SQLFILE[${i}]} > ${SQLFILE_TEMP[${i}]}
    else
      sed s/?/"'"$RSLT_OPEDATE"'"/g ${SQLFILE[${i}]} > ${SQLFILE_TEMP[${i}]}
    fi
    
    #
    #--- UNLOAD処理
    #
    # OM-2015-0003274 2015/12/15 DEL START
#    sh ${G_TOOLSH}/EOKULD02.sh ${SQLFILE_TEMP[${i}]} ${OUTFILE[${i}]} $JOBNAME &
#    
#    PID=$!
#    ARRAY_PID[${i}]=$PID
    # OM-2015-0003274 2015/12/15 DEL END
    # OM-2015-0003274 2015/12/15 ADD START
    sh ${G_TOOLSH}/EOKULD02.sh ${SQLFILE_TEMP[${i}]} ${OUTFILE[${i}]} $JOBNAME
    #終了コードのチェック
    rc_temp=$?
    if [ $rc_temp -ne 0 ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " UNLOAD Error($SVC unload:rc=$rc_temp) " 
        echo $JOBNAME " UNLOAD Error($SVC unload:rc=$rc_temp) "
        # 各作業ファイルを削除する為、ここではリターンしない
    fi
    # rc_tempの方が大きい(ループ中の一番高いエラーを返却)
    if [ ${rc} -lt ${rc_temp} ]
    then
        rc=${rc_temp}
    fi
    # OM-2015-0003274 2015/12/15 ADD END
done

# OM-2015-0003274 2015/12/15 DEL START
#rc=0
#for ARRAY_PID in "${ARRAY_PID[@]}";
#do
#    #バックグラウンドの処理が終わるまで待機する。
#    wait $ARRAY_PID
#    #終了コードのチェック
#    rc_temp=$?
#    if [ $rc_temp -ne 0 ]
#    then
#        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " UNLOAD Error($SVC unload:rc=$rc_temp) " 
#        echo $JOBNAME " UNLOAD Error($SVC unload:rc=$rc_temp) "
#        # 各作業ファイルを削除する為、ここではリターンしない
#    fi
#    # rc_tempの方が大きい(ループ中の一番高いエラーを返却)
#    if [ ${rc} -lt ${rc_temp} ]
#    then
#        rc=${rc_temp}
#    fi
#done
# OM-2015-0003274 2015/12/15 DEL END

for (( i=0; i<LOOP; i++));
do
    #
    #--- 運用日埋め込み済みSQLファイル削除処理
    #
    if [ -e ${SQLFILE_TEMP[${i}]} ]
    then
      rm ${SQLFILE_TEMP[${i}]}
    fi
done

# アンロード実行でエラーがある場合
if [ $rc -ne 0 ]
then
    for (( i=0; i<LOOP; i++));
    do
        # 一時出力ファイルを削除する
        rm ${OUTFILE[${i}]}
    done
    exit ${G_RTN_ERROR}
fi

# 一時出力ファイルをマージする
# お客様(オープン／ファミリー会員)と連絡先から抽出した、
# 重複レコードを削除する為、まずそれぞれをSYSIDでソートする
bsort -s -z1583 -12.12asca -Tflt -t"," -o ${OUTFILE_2_SYSID_SORT} ${OUTFILE[1]}
bsort -s -z1583 -12.12asca -Tflt -t"," -o ${OUTFILE_3_SYSID_SORT} ${OUTFILE[2]}
# お客様(オープン／ファミリー会員)と連絡先の重複レコードを削除しながらマージする
bsort -m -u -12.12asca -z1583 -Tflt -t, -o ${OUTFILE_23_MARGE} \
${OUTFILE_2_SYSID_SORT} ${OUTFILE_3_SYSID_SORT}
# マージしたファイルを抽出元特定用識別コードでソートする
bsort -s -z1583 -0.4asca -Tflt -t"," -o ${OUTFILE_23_MARGE_SKCD_SORT} ${OUTFILE_23_MARGE}
# 問合せ客から抽出したファイルを抽出元特定用識別コードでソートする
bsort -s -z1583 -0.4asca -Tflt -t"," -o ${OUTFILE_1_SKCD_SORT} ${OUTFILE[0]}
# お客様(マスタ会員)から抽出したファイルを抽出元特定用識別コードでソートする
bsort -s -z1583 -0.4asca -Tflt -t"," -o ${OUTFILE_4_SKCD_SORT} ${OUTFILE[3]}
# マージしたファイルと問合せ客ファイルとお客様(マスタ会員)ファイルをマージする
bsort -m -0.4asca -z1583 -Tflt -t, -o ${INFILE_TEMP} \
${OUTFILE_23_MARGE_SKCD_SORT} ${OUTFILE_1_SKCD_SORT} ${OUTFILE_4_SKCD_SORT}

# 一時出力ファイルを削除する
for (( i=0; i<LOOP; i++));
do
    rm ${OUTFILE[${i}]}
done
rm ${OUTFILE_2_SYSID_SORT}
rm ${OUTFILE_3_SYSID_SORT}
rm ${OUTFILE_23_MARGE}
rm ${OUTFILE_23_MARGE_SKCD_SORT}
rm ${OUTFILE_1_SKCD_SORT}
rm ${OUTFILE_4_SKCD_SORT}

#--- MS932 → UTF-8 変換処理
iconv -f MS932 -t UTF8 ${INFILE_TEMP} -o ${INFILE}
rm ${INFILE_TEMP}

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

P1="OPD=,"
P2="SVCCTL=JBSbatMultiServiceControl,"
P3="JOB=EO21Y0310J0,"
P4="IND1=KKIFM326.def,"
P5="INF1=${INFILE},"
P6="IND2=,"
P7="INF2=,"
P8="OTD1=KKIFM327.def,"
P9="OTF1=${OUT_MID_FILE},"
P10="OTD2=,"
P11="OTF2=,"
P12="TABLENAME=,"
P13="SQLKEY=,"
P14="SQLPARAM=,"
P15="ERRFILE=,"
P16="RECOVERY=,"
P17="BREAKPTN=,"
P18="FREE=${RECOVERY_YMD}"
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

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

exit $exit_rc
