#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：契約管理
#
# シェル名      ：商品券発送指図ファイル作成
#
# 機能          ：商品券発送指図ファイルの作成を行う。
#商品券の発送が必要なデータを抽出する。
#運用日の翌日が休業日の場合はデータの作成を行わず処理を終了する。
#なお、休業日の判定は営業日管理にて行う。
#
#商品券発送が必要なデータを抽出し、結果を分割してファイル出力する。
#
# コマンド形式  ：EO2B90110J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v4.00.00       2012/11/17   富士通       IT2-2012-0001702
# v4.00.01       2013/04/04   富士通       KT1-2013-0000424
# v4.00.01       2013/07/25   FJ)井熊      IT1-2013-0001438 送信ファイル名変更対応
# v8.00.00       2014/04/07   富士通       OM-2014-0001279
# v9.00.00       2014/06/04   富士通       TAI-2014-0000019
# v23.00.00      2016/02/08   FJ)藤本      【OM-2016-0000270】性能改善
# 
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

#
#---業務で必要な変数定義
#
#xxx=xxxxxxx
#20120615 ADD TCT)秋山 START
#---運用日付取得
if [ "${OPD}" = "" ];then
   . EOK010310J0.sh "BDATE"
else
   # OM-2016-0000270 性能改善 2016/02/08 MOD START
#   RSLT_OPEDATE = "${OPD}"
   RSLT_OPEDATE="${OPD}"
   # OM-2016-0000270 性能改善 2016/02/08 MOD END
fi
#20120615 ADD TCT)秋山 END

# OM-2016-0000270 性能改善 2016/02/08 ADD START
##############################################################
# 共通関数
##############################################################

#
#--- アンロード関数
#       p1：出力ファイル名
#       p2：クエリファイル名
#       p3：バインド変数置換文字
#
EXEC_UNLOAD()
{
    local _OTF=$1
    local _SQL_FILE=$2
    local _BIND_VAL=$3
    local _SQL_WORK_FILE=${ULD_WORK_DIR}/${JOBNAME}.W_ULD.sql

    # SQLクエリファイル初期化
    cat /dev/null > ${_SQL_WORK_FILE}
    
    # SQL定義ファイルが存在しない場合エラー
    if [ ! -r ${_SQL_FILE} ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${_SQL_FILE}) "
        echo $JOBNAME " File is nonexist(${_SQL_FILE}) "
        exit ${G_RTN_ERROR}
    fi

    # バインド変数を置き換える
    cat ${_SQL_FILE} > ${_SQL_WORK_FILE}
    if [ "${_BIND_VAL}" != "" ]
    then
        for bind in ${_BIND_VAL}
        do
            sed -i -e 0,/?/s/?/"'"$bind"'"/ ${_SQL_WORK_FILE}
        done
    fi

    # 出力ファイルの初期化
    cat /dev/null > ${_OTF}
    rc=$?
    if [ $rc -ne 0 ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File cat error(${_OTF}:rc=$rc) "
        echo $JOBNAME " File cat error(${_OTF}:rc=$rc) "
        exit ${G_RTN_ERROR}
    fi

    # unload
    sh ${G_TOOLSH}/EOKULD02.sh ${_SQL_WORK_FILE} ${_OTF}
    
    rc=$?
    if [ $rc -ne 0 ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " unload error(${_SQL_FILE}:rc=$rc) "
        echo $JOBNAME " unload error(${_SQL_FILE}:rc=$rc) "
        exit ${G_RTN_ERROR}
    fi

    # 一時ファイル削除
    rm -f ${_SQL_WORK_FILE}
}

#
#--- マッチング処理
#      p1：出力ファイルパス
#      p2：マッチングクエリファイルパス
#      p3：バインド変数
EXEC_MATCHING()
{
    local _OUTFILE=$1
    local _MATCHING_FILE=$2
    local _CONV_FILE=$3
    local _MATCHING_QUERY_WORK=${ULD_WORK_DIR}/${JOBNAME}.W_MATCH_QUERY.tmp

    # マッチングクエリファイルの初期化
    cat /dev/null > ${_MATCHING_QUERY_WORK}
    
    # マッチングクエリファイルの存在チェック
    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 ${_CONV_FILE}
    do
        # 入力パラメータのエスケープ処理
        bind_escape=`echo $bind | sed "s/\//\\\\\\\\\//g"`
        sed -i -e 0,/#FILE#/s/#FILE#/$bind_escape/ ${_MATCHING_QUERY_WORK}
    done

    # 出力ファイルの初期化
    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 ${_MATCHING_QUERY_WORK}
    
    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

    # 一時ファイル削除
    rm -f ${_MATCHING_QUERY_WORK}
}
# OM-2016-0000270 性能改善 2016/02/08 ADD END

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

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

P1="OPD=,"
P2="SVCCTL=JBSbatMultiServiceControl,"
P3="JOB=EO2B90110J0,"
P4="IND1=,"
P5="INF1=,"
P6="IND2=,"
P7="INF2=,"
# v8.00.00 MOD START
#P8="OTD1=KKIFE165.def,"
#P9="OTF1=${GAIBU_SEND_DIR_KK}/KKIFE165/KKIFE165_${RSLT_OPEDATE}.csv,"
#P9="OTF1=${GAIBU_SEND_DIR_KK}/KKIFE165/KKIFE165001.txt,"
#P10="OTD2=KKIFM198.def,"
#P11="OTF2=${MID_DIR_KK}/KKIFM198_${RSLT_OPEDATE}.csv,"
#P12="TABLENAME=KK_T_DCHSKMST,"
#P13="SQLKEY=KK_SELECT_011,"
#P14="SQLPARAM=SQLPARAM_KEY_OPD_YYYYMMDD;SQLPARAM_KEY_OPD_YYYYMMDD;SQLPARAM_KEY_OPD_YYYYMMDD;SQLPARAM_KEY_OPD_YYYYMMDD;SQLPARAM_KEY_OPD_YYYYMMDD;SQLPARAM_KEY_OPD_YYYYMMDD;SQLPARAM_KEY_OPD_YYYYMMDD;SQLPARAM_KEY_OPD_YYYYMMDD;SQLPARAM_KEY_OPD_YYYYMMDD;SQLPARAM_KEY_OPD_YYYYMMDD;SQLPARAM_KEY_OPD_YYYYMMDD,"
P8="OTD1=,"
P9="OTF1=,"
P10="OTD2=,"
P11="OTF2=,"
P12="TABLENAME=,"
P13="SQLKEY=,"
P14="SQLPARAM=,"
# v8.00.00 MOD END
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

# v8.00.00 ADD START
#
#--- ファイル定義
#
# OM-2016-0000270 性能改善 2016/02/08 MOD START
# ①データ抽出項目設定（紹介コードあり）アンロードSQL
SQLFILE=${SQL_DIR}/KK_U_KK0081_95.sql
#SQLFILE_TEMP=${SQL_DIR}/KK_U_KK0081_95_TEMP.sql
# ②データ抽出項目設定（紹介コードなし）アンロードSQL
SQLFILE2=${SQL_DIR}/KK_U_KK1391_01.sql
# ③データ抽出項目設定（紹介コードなし）出力ファイル（マッチング後）用マッチング定義ファイル
MATCHING_DEF=${G_TOOLSH}/util/def/KK_CM_0587.def
# OM-2016-0000270 性能改善 2016/02/08 MOD END

# v9.00.00 MOD Start
#OUTFILE_DN=${MID_DIR_KK}/KKIFM592001.csv
#OUTFILE=${MID_DIR_KK}/KKIFM592001_crnt.csv
OUTFILE_DN=${TMP_DIR_KK}/KKIFM592001.csv
OUTFILE=${TMP_DIR_KK}/KKIFM592001_crnt.csv
# v9.00.00 MOD End
# OM-2016-0000270 性能改善 2016/02/08 ADD START
# サービス契約（カレント）共通アンロードファイル
COMULD2_KK0081_CUR=${MID_DIR_CC}/CCIFM020002.csv
# サービス契約（カレント）抽出対象ファイル
OUTFILE_KK0081_TEMP=${LOC_DIR_KK}/${JOBNAME}_CCIFM020002_TEMP.csv
# ①データ抽出項目設定（紹介コードあり）出力ファイル
OUTFILE_TEMP1=${LOC_DIR_KK}/${JOBNAME}_KKIFM592001_TEMP1.csv
# ②データ抽出項目設定（紹介コードなし）出力ファイル
OUTFILE_TEMP2=${LOC_DIR_KK}/${JOBNAME}_KKIFM592001_TEMP2.csv
# ③データ抽出項目設定（紹介コードなし）出力ファイル（マッチング後）
OUTFILE_TEMP3=${LOC_DIR_KK}/${JOBNAME}_KKIFM592001_TEMP3.csv
# ④データ抽出項目設定（紹介コードなし）出力ファイル（重複削除）
OUTFILE_TEMP4=${LOC_DIR_KK}/${JOBNAME}_KKIFM592001_TEMP4.csv
# OM-2016-0000270 性能改善 2016/02/08 ADD END

# OM-2016-0000270 性能改善 2016/02/08 DEL START
##
##--- 各ファイルの存在チェックを行う
##
#if [ ! -r $SQLFILE ]
#then
#    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist($SQLFILE_KK0081) "
#    echo $JOBNAME " File is nonexist($SQLFILE_KK0081) "
#    exit ${G_RTN_ERROR}
#fi
#
##
##--- アンロードファイルのクリアを行う
##
#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
#
##
##--- UNLOAD処理
##
##--- バインド変数設定処理
#sed s/ZZZZZ/${RSLT_OPEDATE}/g ${SQLFILE} > ${SQLFILE_TEMP}
#sh ${G_TOOLSH}/EOKULD02.sh ${SQLFILE_TEMP} ${OUTFILE}
# OM-2016-0000270 性能改善 2016/02/08 DEL END

# OM-2016-0000270 性能改善 2016/02/08 ADD START
# サービス契約（カレント）抽出対象ファイルを作成
#   サービス契約（カレント）共通アンロードファイルから下記条件に合致するレコードを抽出する。
#   ・サービス契約ステータスが100（サービス提供中）、210（休止・中断中）、220（停止中）、910（解約済）のいずれか
#   ・サービス開始年月日が運用日以前
#     0.10  ：サービス契約番号
#     2.3   ：サービス契約ステータス
#    22.8   ：サービス開始年月日
bsortex -copy -record recform=txtcsv \
  -input file=${COMULD2_KK0081_CUR} \
         reclen=${ULD2_REC_LEN_KK0081} \
         reconst="0.10" \
         include="(2.3asc.eq.'100'.or.2.3asc.eq.'210'.or.2.3asc.eq.'220'.or.2.3asc.eq.'910').and.22.8asc.gt.' '.and.22.8asc.le.'${RSLT_OPEDATE}'" \
  -output file=${OUTFILE_KK0081_TEMP}

#
#--- UNLOAD処理
#
# ①データ抽出項目設定（紹介コードあり）アンロード
EXEC_UNLOAD ${OUTFILE_TEMP1} ${SQLFILE} "${RSLT_OPEDATE} ${RSLT_OPEDATE} ${RSLT_OPEDATE} ${RSLT_OPEDATE} ${RSLT_OPEDATE} ${RSLT_OPEDATE}"

# ②データ抽出項目設定（紹介コードなし）アンロード
EXEC_UNLOAD ${OUTFILE_TEMP2} ${SQLFILE2} "${RSLT_OPEDATE} ${RSLT_OPEDATE} ${RSLT_OPEDATE} ${RSLT_OPEDATE} ${RSLT_OPEDATE}"

# ③データ抽出項目設定（紹介コードなし）出力ファイル（マッチング後）を作成
#   ②のファイルからサービス契約（カレント）抽出対象ファイルのサービス契約番号のみを抽出する。
#   マッチング時にサービス契約番号の項目は削除する。
EXEC_MATCHING ${OUTFILE_TEMP3} ${MATCHING_DEF} "${OUTFILE_TEMP2} ${OUTFILE_KK0081_TEMP}"

# ④データ抽出項目設定（紹介コードなし）出力ファイル（重複削除）を作成
#   データ抽出項目設定番号をキーに重複を除く。※データ抽出項目設定番号が同じ場合はレコード全体が同一となる。
#     9.12  ：データ抽出項目設定番号
bsortex -sort key="9.12asc" -record recform=txtcsv \
  -input file=${OUTFILE_TEMP3} \
         reclen=200 \
  -summary suppress \
  -output file=${OUTFILE_TEMP4}

# 商品券発送アンロードファイルを作成（①と④を連結）
cat ${OUTFILE_TEMP1} ${OUTFILE_TEMP4} > ${OUTFILE}
# OM-2016-0000270 性能改善 2016/02/08 ADD END

#
#--- ダブルクォート除去
#
sed -e "s/\"//g" ${OUTFILE} > ${OUTFILE_DN}

#
#--- 分割
#
SPLT=4
sh ${G_TOOLSH}/EO2FILESPLIT.sh ${OUTFILE_DN} ${SPLT} 0

# v9.00.00 ADD Start
# 調査用にJavaのINファイルをコピーする
cp ${TMP_DIR_KK}/KKIFM592001_0*.csv ${MID_DIR_KK}

# v9.00.00 ADD End
#--- 除去
# OM-2016-0000270 性能改善 2016/02/08 MOD START
#rm -f $SQLFILE_TEMP
rm -f ${OUTFILE_KK0081_TEMP}
rm -f ${OUTFILE_TEMP1}
rm -f ${OUTFILE_TEMP2}
rm -f ${OUTFILE_TEMP3}
rm -f ${OUTFILE_TEMP4}
# OM-2016-0000270 性能改善 2016/02/08 MOD END

# v8.00.00 ADD END

# v8.00.00 DEL START
#
#---ＡＰＬ起動
#

#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
# v8.00.00 DEL END

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

exit $exit_rc
