#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：契約管理
#
# シェル名      ：移行対象抽出
#
# 機能          ：移行対象抽出
#
# コマンド形式  ：EO2EU0210J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v32.00.00       2017/05/10  FJ)三宅隆    新規作成(【ANK-3149-00-00】新セキュリティパック導入)
#
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

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

#--- アンロードSQL定義ファイル
# オプションサービス契約アンロードSQL定義ファイル
ULDSQL_KK0351=${SQL_DIR}/KK_U_KK0351_28.sql
# サービス契約アンロードSQL定義ファイル
ULDSQL_KK0081=${SQL_DIR}/KK_U_KK0081_125.sql
# 課金先アンロードSQL定義ファイル
ULDSQL_KK0321=${SQL_DIR}/KK_U_KK0321_21.sql

#--- マッチングツール定義ファイル
# マッチングツール定義ファイル(オプションサービス契約-サービス契約-課金先)
MATCHDEF_KK0351=${G_TOOLSH}/util/def/KK_CM_0622.def

#--- 一時ファイル
# オプションサービス契約アンロードファイル
ULDFILE_KK0351=${LOC_DIR_KK}/${JOBNAME}_KK0351_ULD.csv
# オプションサービス契約アンロードファイル(ソート後)
ULDFILE_KK0351_SORT=${LOC_DIR_KK}/${JOBNAME}_KK0351_ULD_SORT.csv
# オプションサービス契約アンロードファイル(カレント)
ULDFILE_KK0351_CUR=${LOC_DIR_KK}/${JOBNAME}_KK0351_ULD_CUR.csv
# サービス契約アンロードファイル
ULDFILE_KK0081=${LOC_DIR_KK}/${JOBNAME}_KK0081_ULD.csv
# サービス契約アンロードファイル(ソート後)
ULDFILE_KK0081_SORT=${LOC_DIR_KK}/${JOBNAME}_KK0081_ULD_SORT.csv
# サービス契約アンロードファイル(カレント)
ULDFILE_KK0081_CUR=${LOC_DIR_KK}/${JOBNAME}_KK0081_ULD_CUR.csv
# 課金先アンロードファイル
ULDFILE_KK0321=${LOC_DIR_KK}/${JOBNAME}_KK0321_ULD.csv
# オプションサービス契約抽出ファイル(解約済除く)
TMPFILE_KK0351=${LOC_DIR_KK}/${JOBNAME}_KK0351.csv
# オプションサービス契約抽出ファイル(解約済)
TMPFILE_KK0351_DSL=${LOC_DIR_KK}/${JOBNAME}_KK0351_DSL.csv
# オプションサービス契約抽出ファイル(解約前ステータスあり)
TMPFILE_KK0351_DSL2=${LOC_DIR_KK}/${JOBNAME}_KK0351_DSL2.csv
# オプションサービス契約マッチング用ファイル
TMPFILE_KK0351_MATCH=${LOC_DIR_KK}/${JOBNAME}_KK0351_MATCH.csv
# 課金先抽出ファイル
TMPFILE_KK0321=${LOC_DIR_KK}/${JOBNAME}_KK0321.csv
# マッチング結果ファイル
TMPFILE_MATCH_RSLT=${LOC_DIR_KK}/${JOBNAME}_MATCH_RSLT.csv

#--- 出力ファイル
OUTFILE=${MID_DIR_KK}/KKIFM732001.csv

##############################################################
# 共通関数
##############################################################

#
#--- アンロード関数
#       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}

    # アンロード
    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：マッチングクエリファイルパス
EXEC_MATCHING()
{
    local _OUTFILE=$1
    local _MATCHING_FILE=$2

    # マッチングクエリファイルの存在チェック
    if [ ! -r ${_MATCHING_FILE} ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${_MATCHING_FILE}) "
        echo $JOBNAME " File is nonexist(${_MATCHING_FILE}) "
        exit ${G_RTN_ERROR}
    fi

    # 出力ファイルの初期化
    cat /dev/null > ${_OUTFILE}

    # マッチング実行
    export ZTLOUTFILE=${_OUTFILE}
    ${G_TOOLSH}/util/bin/ZTLMAT01 ${_MATCHING_FILE}

    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
}

#
#--- bsortexコマンド実行時のエラー処理
#      p1：bsortexコマンドの終了コード
#      p2：bsortexコマンドの入力ファイル
BSORT_ERROR()
{
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " bsortex error(input file=$2:rc=$1) "
    echo $JOBNAME " bsortex error(input file=$2:rc=$1) "
    exit ${G_RTN_ERROR}
}


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

#
#---運用日付取得
#
if [ "${OPD}" = "" ]; then
   . EOK010310J0.sh "BDATE"
   OPD=${RSLT_OPEDATE}
else
   RSLT_OPEDATE="${OPD}"
fi

# オプション回復可能な最古の日付(運用日付 - 60日)のデータを取得
KAIHK_PSB_DATE=`date -d "${OPD} 60 days ago" +%Y%m%d`

#
#---1. アンロード処理
#

# 1-1. オプションサービス契約
EXEC_UNLOAD ${ULDFILE_KK0351} ${ULDSQL_KK0351}

# キー項目毎に予約適用年月日、世代登録年月日時分秒でソート
# 抽出条件：オプションサービスコード = 'B077'
BSORT_DEF_KK0351="@SVC_KEI_NO=0.10 @OP_SVC_KEI_NO=1.12 @OP_SVC_KEI_STAT=2.3 @SVC_DLRE_CD=3.2 @SVC_STP_RSN_CD=4.2 @PAUSE_STP_CD=5.2 @SHOSA_DSL_FIN_CD=6.1 @SVC_ENDYMD=7.8 @OLD_OP_SVC_KEI_STAT=8.3 @GENE_ADD_DTM=9.17 @RSV_APLY_YMD=10.8 @RSV_APLY_CD=11.1 @OP_SVC_CD=12.4"
bsortex -define ${BSORT_DEF_KK0351} -sort key=@OP_SVC_KEI_NOasc,@RSV_APLY_YMDasc,@GENE_ADD_DTMasc -record recform=txtcsv \
        -input file=${ULDFILE_KK0351} reclen=120 \
         include="@RSV_APLY_CDasc.eq.'2',@RSV_APLY_YMDasc.gt.' ',@RSV_APLY_YMDasc.le.'${OPD}',@OP_SVC_CDasc.eq.'B077'" \
        -output file=${ULDFILE_KK0351_SORT} \
         reconst="@SVC_KEI_NO,@OP_SVC_KEI_NO,@OP_SVC_KEI_STAT,@SVC_DLRE_CD,@SVC_STP_RSN_CD,@PAUSE_STP_CD,@SHOSA_DSL_FIN_CD,@SVC_ENDYMD,@OLD_OP_SVC_KEI_STAT"
rc=$?
if [ $rc -ne 0 ]
then
    BSORT_ERROR ${rc} ${ULDFILE_KK0351}
fi

# マージ（各キー項目毎のカレントレコードのみを残す）
bsortex -define ${BSORT_DEF_KK0351} -merge key=@OP_SVC_KEI_NOasc -record recform=txtcsv \
        -input file=${ULDFILE_KK0351_SORT} reclen=70 -summary suppress last \
        -output file=${ULDFILE_KK0351_CUR}
rc=$?
if [ $rc -ne 0 ]
then
    BSORT_ERROR ${rc} ${ULDFILE_KK0351_SORT}
fi

# 1-2. サービス契約
EXEC_UNLOAD ${ULDFILE_KK0081} ${ULDSQL_KK0081}

# キー項目毎に予約適用年月日、世代登録年月日時分秒でソート
BSORT_DEF_KK0081="@SVC_KEI_NO=0.10 @SYSID=1.10 @PRC_GRP_CD=2.2 @GENE_ADD_DTM=3.17 @RSV_APLY_YMD=4.8 @RSV_APLY_CD=5.1"
bsortex -define ${BSORT_DEF_KK0081} -sort key=@SVC_KEI_NOasc,@RSV_APLY_YMDasc,@GENE_ADD_DTMasc -record recform=txtcsv \
        -input file=${ULDFILE_KK0081} reclen=70 \
         include="@RSV_APLY_CDasc.eq.'2',@RSV_APLY_YMDasc.gt.' ',@RSV_APLY_YMDasc.le.'${OPD}'" \
        -output file=${ULDFILE_KK0081_SORT} \
         reconst="@SVC_KEI_NO,@SYSID,@PRC_GRP_CD"
rc=$?
if [ $rc -ne 0 ]
then
    BSORT_ERROR ${rc} ${ULDFILE_KK0081}
fi

# マージ（各キー項目毎のカレントレコードのみを残す）
bsortex -define ${BSORT_DEF_KK0081} -merge key=@SVC_KEI_NOasc -record recform=txtcsv \
        -input file=${ULDFILE_KK0081_SORT} reclen=40 -summary suppress last \
        -output file=${ULDFILE_KK0081_CUR}
rc=$?
if [ $rc -ne 0 ]
then
    BSORT_ERROR ${rc} ${ULDFILE_KK0081_SORT}
fi

# 1-3. 課金先
EXEC_UNLOAD ${ULDFILE_KK0321} ${ULDSQL_KK0321}

#
#---2. アンロードファイルからの抽出
#

# 2-1. オプションサービス契約抽出ファイル(解約済除く)を出力
#      抽出条件：(オプションサービス契約ステータス = '020' AND 照査解約完了コード = '1') OR (オプションサービス契約ステータス IN ('010','030','100','210','220'))
bsortex -define ${BSORT_DEF_KK0351} -copy -record recform=txtcsv \
        -input file=${ULDFILE_KK0351_CUR} reclen=70 \
               include="(@OP_SVC_KEI_STATasc.eq.'020'.and.@SHOSA_DSL_FIN_CDasc.eq.'1').or.(@OP_SVC_KEI_STATasc.eq.'010'.or.@OP_SVC_KEI_STATasc.eq.'030'.or.@OP_SVC_KEI_STATasc.eq.'100'.or.@OP_SVC_KEI_STATasc.eq.'210'.or.@OP_SVC_KEI_STATasc.eq.'220')" \
        -output file=${TMPFILE_KK0351}
rc=$?
if [ $rc -ne 0 ]
then
    BSORT_ERROR ${rc} ${ULDFILE_KK0351_CUR}
fi

# 2-2. オプションサービス契約抽出ファイル(解約済)を出力
#      抽出条件：オプションサービス契約ステータス = '910' AND サービス終了年月日 >= オプション回復可能な最古の日付
bsortex -define ${BSORT_DEF_KK0351} -copy -record recform=txtcsv \
        -input file=${ULDFILE_KK0351_CUR} reclen=70 \
               include="@OP_SVC_KEI_STATasc.eq.'910'.and.@SVC_ENDYMDasc.ge.'${KAIHK_PSB_DATE}'" \
        -output file=${TMPFILE_KK0351_DSL}
rc=$?
if [ $rc -ne 0 ]
then
    BSORT_ERROR ${rc} ${ULDFILE_KK0351_CUR}
fi

# 2-3. 課金先抽出ファイルを出力
#      抽出条件：課金先適用開始年月日 <= 運用日付 AND 課金先適用終了年月日 >= 運用日付
BSORT_DEF_KK0321="@KAKINS_TSTAYMD=2.8 @KAKINS_TENDYMD=3.8"
bsortex -define ${BSORT_DEF_KK0321} -copy -record recform=txtcsv \
        -input file=${ULDFILE_KK0321} reclen=50 \
               include="@KAKINS_TSTAYMDasc.le.'${OPD}'.and.@KAKINS_TENDYMDasc.ge.'${OPD}'" \
        -output file=${TMPFILE_KK0321}
rc=$?
if [ $rc -ne 0 ]
then
    BSORT_ERROR ${rc} ${ULDFILE_KK0321}
fi

#---3. オプションサービス契約抽出ファイル(解約済)の解約前のオプションサービス契約ステータスを抽出(Javaプログラム)

#
#---パラメタ定義
#
P1="OPD=$OPD,"
P2="SVCCTL=JBSbatMultiServiceControl,"
P3="JOB=EO2EU0210J0,"
P4="IND1=KKIFM735.def,"
P5="INF1=${TMPFILE_KK0351_DSL},"
P6="IND2=,"
P7="INF2=,"
P8="OTD1=KKIFM735.def,"
P9="OTF1=${TMPFILE_KK0351_DSL2},"
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

#---4. オプションサービス契約抽出ファイル(解約済除く)、オプションサービス契約抽出ファイル(解約前ステータスあり)を連結

cat ${TMPFILE_KK0351} ${TMPFILE_KK0351_DSL2} > ${TMPFILE_KK0351_MATCH}

#---5. オプションサービス契約マッチング用ファイル、サービス契約アンロードファイル(カレント)、課金先抽出ファイルをマッチング
export TMPFILE_KK0351_MATCH
export ULDFILE_KK0081_CUR
export TMPFILE_KK0321
EXEC_MATCHING ${TMPFILE_MATCH_RSLT} ${MATCHDEF_KK0351}

#---6. 出力ファイルのソート
BSORT_DEF_OUTFILE="@OP_SVC_KEI_NO=2.12"
bsortex -define ${BSORT_DEF_OUTFILE} -sort key=@OP_SVC_KEI_NOasc -record recform=txtcsv \
        -input file=${TMPFILE_MATCH_RSLT} reclen=100 \
        -output file=${OUTFILE}
rc=$?
if [ $rc -ne 0 ]
then
    BSORT_ERROR ${rc} ${TMPFILE_MATCH_RSLT}
fi

# 一時ファイル削除
#rm -f ${ULDFILE_KK0351}
#rm -f ${ULDFILE_KK0351_SORT}
#rm -f ${ULDFILE_KK0351_CUR}
#rm -f ${ULDFILE_KK0081}
#rm -f ${ULDFILE_KK0081_SORT}
#rm -f ${ULDFILE_KK0081_CUR}
#rm -f ${ULDFILE_KK0321}
#rm -f ${TMPFILE_KK0351}
#rm -f ${TMPFILE_KK0351_DSL}
#rm -f ${TMPFILE_KK0351_DSL2}
#rm -f ${TMPFILE_KK0351_MATCH}
#rm -f ${TMPFILE_KK0321}
#rm -f ${TMPFILE_MATCH_RSLT}

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

exit $exit_rc