#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：契約管理
#
# シェル名      ：卸先事業者認証ＩＤ発行情報抽出
#
# 機能          ：設備卸契約者が保持する、照査ＯＫとなったネット契約を抽出し、「認証ＩＤ発行（全卸先事業者）」に出力する。
#
# コマンド形式  ：EO2GY0110J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# V37.00.00       2018/03/07  FJ)王       【ANK-3366-00-00】eo光設備卸対応 新規作成
# V37.00.01       2018/04/02  FJ)王       【IT1-2018-0000042】eo光設備卸対応 障害改修
#
##############################################################

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

#
#---ツール格納場所
#
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}
fi

#
#---業務で必要な変数定義
#
#xxx=xxxxxxx
##############################################################
# 業務処理
##############################################################
sh ${G_TOOLSH}/EOK010210J0.sh CS00025I $JOBNAME

#
#--- クエリ編集(マッチング)
#       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
}

#
#--- アンロード関数
#       p1：テーブル名／クエリファイル名
#       p2：出力ファイル名
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
    sh ${G_TOOLSH}/EOKULD02.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
}

# IT1-2018-0000042 ADD START
#
#--- クエリ編集(アンロード)
#       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
}
# IT1-2018-0000042 ADD END

#
#--- 文字コード変換(Shift_JIS → UTF-8)
#       p1：対象ファイル名
EXEC_TO_UTF8()
{
    if [ `nkf -g $1` == 'Shift_JIS' ]
    then
        nkf -x -w --overwrite $1
    fi
}

#
#--- ファイル定義
#
# お客様(全件)
COMULD_CK0011_ALL=${MID_DIR_CC}/CCIFM001001.csv
# お客様(ソート)
FILE_CK0011_SORT=${MID_DIR_KK}/CK0011_SORT.csv
# お客様(カレント)
FILE_CK0011_CRNT=${MID_DIR_KK}/CK0011_CRNT.csv
# 設備卸のお客様(カレント)
FILE_CK0011_EQUIP_OROSI_CRNT=${MID_DIR_KK}/CK0011_EQUIP_OROSI_CRNT.csv
# サービス契約(カレント)
COMULD_KK0081_CUR=${MID_DIR_CC}/CCIFM018002.csv
# サービス契約(照査ＯＫ)
FILE_KK0081_SHOSA_OK=${MID_DIR_KK}/KK0081_SHOSA_OK.csv
# サービス契約内訳(カレント)
FILE_EO2GY010_KK0161_CRNT=${MID_DIR_KK}/EO2GY010_KK0161_CRNT.csv
# サービス契約内訳<eo光ネット>(カレント)
FILE_EO2GY010_KK0171_CRNT=${MID_DIR_KK}/EO2GY010_KK0171_CRNT.csv
# 認証ＩＤ発行(全卸先事業者)
FILE_KKIFM791=${MID_DIR_KK}/KKIFM791.csv
# マッチングファイル定義
DEFFILE_KK_CM_0653=${G_TOOLSH}/util/def/KK_CM_0653.def
# アンロードSQL定義
SQLFILE_KK_U_KK0161_30=${SQL_DIR}/KK_U_KK0161_30.sql
SQLFILE_KK_U_KK0171_06=${SQL_DIR}/KK_U_KK0171_06.sql

#
#--- お客様(カレント)を取得する
#   「お客様.予約適用コード = "2"」
#    AND 「お客様.予約適用年月日 <> 空白」
#    AND 「お客様.予約適用年月日 <= バッチ実行日付」
#    キー項目毎に予約適用年月日、世代登録年月日時分秒でソート
#
bsortex \
    -sort key=0.10asc,9.8asc,1.17asc -record recform=txtcsv \
    -input file=${COMULD_CK0011_ALL} \
        reclen=${ULD_REC_LEN_CK0011} \
        include="6.1asc.eq.'2',9.8asc.gt.' ',9.8asc.le.'${OPD}'" \
    -output file=${FILE_CK0011_SORT}

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

#
#--- マージ（各キー項目毎のカレントレコードのみを残す）
#
bsortex \
    -merge key=0.10asc -record recform=txtcsv \
    -input file=${FILE_CK0011_SORT} \
        reclen=${ULD_REC_LEN_CK0011} \
        -summary suppress last \
    -output file=${FILE_CK0011_CRNT}

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

#
#--- 設備卸のお客様(カレント)を取得する
#    お客様.卸先事業者コード <> 空白
#    - SELECT(reconst)項目は以下
#        0 - 0.10    : SYSID
#        1 - 8.2     : 卸先事業者コード
bsortex \
    -copy -record recform=txtcsv \
    -input file=${FILE_CK0011_CRNT} \
        reclen=${ULD_REC_LEN_CK0011} \
        reconst="0.10,8.2" \
        include="8.2asc.gt.' '" \
    -output file=${FILE_CK0011_EQUIP_OROSI_CRNT}

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

#
#--- サービス契約(照査ＯＫ)を取得する
#    サービス契約.サービス契約ステータス = 「照査済:020」
#    AND サービス契約.照査解約完了コード = 「照査ＯＫ:1」
#    AND サービス契約のカレント AND 料金グループコード = 「ｅｏ光ネットホームタイプ：02」
#    AND サービス契約.照査完了年月日 = バッチ運用日付
#    - SELECT(reconst)項目は以下
#        0 - 3.10    : SYSID
#        1 - 0.10    : サービス契約番号
bsortex \
    -copy -record recform=txtcsv \
    -input file=${COMULD_KK0081_CUR} \
        reclen=${ULD_REC_LEN_KK0081} \
        reconst="3.10,0.10" \
        include="2.3asc.eq.'020',38.1asc.eq.'1',7.2asc.eq.'02',11.8asc.eq.'${OPD}'" \
    -output file=${FILE_KK0081_SHOSA_OK}

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

#
#--- サービス契約内訳(カレント)を取得する(アンロード)
#
# IT1-2018-0000042 MOD START
# EXEC_UNLOAD ${SQLFILE_KK_U_KK0161_30} ${FILE_EO2GY010_KK0161_CRNT}
EDIT_ULD_QUERY ${SQLFILE_KK_U_KK0161_30} "${OPD}"
EXEC_UNLOAD ${SQL_WORK_FILE} ${FILE_EO2GY010_KK0161_CRNT}
# IT1-2018-0000042 MOD END

#
#--- サービス契約内訳<eo光ネット>(カレント)を取得する(アンロード)
#
EXEC_UNLOAD ${SQLFILE_KK_U_KK0171_06} ${FILE_EO2GY010_KK0171_CRNT}

#
#--- 設備卸のお客様に紐付く照査ＯＫのISP認証ID・ISP認証IDパスワードを取得し(マッチング)、認証ＩＤ発行（全卸先事業者）(KKIFM791.csv)を出力する
#    設備卸のお客様.SYSID = サービス契約(照査ＯＫ).SYSID
#    AND サービス契約(照査ＯＫ).サービス契約番号 = サービス契約内訳(カレント).サービス契約番号
#    AND サービス契約内訳(カレント).サービス契約内訳番号 = サービス契約内訳<eo光ネット>(カレント).サービス契約内訳番号
EDIT_MATCHING_QUERY ${DEFFILE_KK_CM_0653} "${FILE_CK0011_EQUIP_OROSI_CRNT} ${FILE_KK0081_SHOSA_OK} ${FILE_EO2GY010_KK0161_CRNT} ${FILE_EO2GY010_KK0171_CRNT}"
EXEC_MATCHING ${FILE_KKIFM791} ${MATCHING_QUERY_WORK}

#--- 文字コード変換
EXEC_TO_UTF8 ${FILE_KKIFM791}

#
#--- 一時ファイルの削除を行う
#
rm -f ${FILE_CK0011_SORT}
rm -f ${FILE_CK0011_CRNT}
rm -f ${FILE_CK0011_EQUIP_OROSI_CRNT}
rm -f ${FILE_KK0081_SHOSA_OK}
rm -f ${FILE_EO2GY010_KK0161_CRNT}
rm -f ${FILE_EO2GY010_KK0171_CRNT}

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

exit ${G_RTN_NORMAL}
