#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：顧客管理
#
# シェル名      ：解約精算金検証・マッチング
#
# 機能          ：解約精算金検証・請求内訳抽出ファイルと解約精算金検証・解約レター登録情報抽出ファイルを読み込みマッチングを行なう。
#
# コマンド形式  ：EO2GB0310J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v33.00.00       2017/09/21  FJ)平野      【ANK-3252-00-00】（契アシRDSツール改善）解約精算金のシステム化対応
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

#
#--- ファイル定義
#
# 解約精算金検証・請求内訳抽出ファイル
FILE_PATH_KKIFM752=${MID_DIR_KK}/KKIFM752.csv
# 解約精算金検証・請求内訳抽出集約済みファイル
FILE_PATH_KKIFM763=${MID_DIR_KK}/KKIFM763.csv
# 解約精算金検証・解約レター登録情報抽出ファイル
FILE_PATH_KKIFM753=${MID_DIR_KK}/KKIFM753.csv
# 解約精算金検証・マッチングファイル
FILE_PATH_KKIFM754=${MID_DIR_KK}/KKIFM754.csv

# 一時ファイル

# 解約精算金検証・請求内訳抽出ファイル_ソート後
TMP_FILE_PATH_KKIFM752=${MID_DIR_KK}/KKIFM752_sort.csv
# 解約精算金検証・解約レター登録情報抽出ファイル_ソート後
TMP_FILE_PATH_KKIFM753=${MID_DIR_KK}/KKIFM753_sort.csv

# bsortex簡略名定義
SORT_BSORT_DEF_1="@SKY_KEI_NO=0.10asc @SVC_KEI_NO=1.10asc @SSN_PNLTY_DIV=9.1asc"
SORT_BSORT_DEF_2="@SKY_KEI_NO=3.10asc @SVC_KEI_NO=4.10asc @SSN_PNLTY_DIV=5.1asc @ADD_DTM=6.17asc"

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

#
#--- 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}
}

#
#--- ファイル存在チェックエラー
#      p1：ファイル名
#
CHK_ERROR()
{
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${1}) "
    echo $JOBNAME " File is nonexist(${1}) "
}
    
##############################################################
# 業務処理
##############################################################
sh ${G_TOOLSH}/EOK010210J0.sh CS00025I $JOBNAME

#
#--- ■初期処理
#
CHK_FLG=0
# 解約精算金検証・請求内訳抽出ファイルの存在チェック
if [ ! -r ${FILE_PATH_KKIFM752} ]
then
    CHK_ERROR ${FILE_PATH_KKIFM752}
    CHK_FLG=1
fi

# 解約精算金検証・解約レター登録情報抽出ファイルの存在チェック
if [ ! -r ${FILE_PATH_KKIFM753} ]
then
    CHK_ERROR ${FILE_PATH_KKIFM753}
    CHK_FLG=1
fi

# ファイル存在チェックでエラーがあった場合
if [ $CHK_FLG -eq 1 ]
then
    exit ${G_RTN_ERROR}
fi

# 解約精算金検証・請求内訳抽出ファイルのソート
bsortex -define ${SORT_BSORT_DEF_1} \
    -sort   key="@SKY_KEI_NO,@SVC_KEI_NO,@SSN_PNLTY_DIV" -record recform=txtcsv \
    -input  file=${FILE_PATH_KKIFM752} reclen=750 \
    -output file=${TMP_FILE_PATH_KKIFM752}

rc=$?
if [ ${rc} -ne 0 ]
then
    BSORT_ERROR $rc ${FILE_PATH_KKIFM752}
fi

# 解約精算金検証・解約レター登録情報抽出ファイルのソート
bsortex -define ${SORT_BSORT_DEF_2} \
    -sort   key="@SKY_KEI_NO,@SVC_KEI_NO,@SSN_PNLTY_DIV,@ADD_DTMr" -record recform=txtcsv \
    -input  file=${FILE_PATH_KKIFM753} reclen=350 \
    -output file=${TMP_FILE_PATH_KKIFM753}

rc=$?
if [ ${rc} -ne 0 ]
then
    BSORT_ERROR $rc ${FILE_PATH_KKIFM753}
fi

#
#--- 解約精算金検証・請求内訳抽出ファイルの集約
#

# 事前にファイルをクリア
cat /dev/null > ${FILE_PATH_KKIFM763}

OLD_IFS=$IFS
IFS=","
LASTKEY=""
AMNT=""
ALI=""
TMP_AMNT=""
TMP_BIKO=""
BLANK="　"
COLON="："

while read LINE
do
    set ${LINE}
    
    # 精算金・違約金区分が'0'（請求内訳なし）の場合
    if [ "${10}" = "\"0\"" ]
    then
        # 請求契約番号 + サービス契約番号で解約精算金検証・解約レター登録情報抽出ファイルを検索
        RET=`grep "${1},${2}" ${TMP_FILE_PATH_KKIFM753} | wc -l`
        if [ "${RET}" -gt 0 ]
        then
            continue
        fi
    fi

    # キー（請求契約番号 + サービス契約番号 + 精算金・違約金区分）
    KEY="${1}${2}${10}"

    if [ ! "${LASTKEY}" = "" ]
    then
        # キーが退避したキーと一致する場合
        if [ "${KEY}" = "${LASTKEY}" ]
        then
            # 金額を集計
            TMP_AMNT=`expr ${TMP_AMNT} + ${AMNT}`
            if [ "${TMP_BIKO}" = "" ]
            then
                # システム備考を編集
                TMP_BIKO=${ALI}${COLON}${AMNT}
            else
                # システム備考を編集
                TMP_BIKO=${TMP_BIKO}${BLANK}${ALI}${COLON}${AMNT}
            fi
        else
            # 集約しているかの判断
            if [ "${TMP_AMNT}" = "" ]
            then
                # 集約が無いのでそのまま出力
                IFS=$OLD_IFS
                echo "${TMP_LINE_1},\"${AMNT}\",${TMP_LINE_2},\"${ALI}\",\"\"" >> ${FILE_PATH_KKIFM763}
                IFS=","
            else
                # 集約する最終行分の加算
                TMP_AMNT=`expr ${TMP_AMNT} + ${AMNT}`
                TMP_BIKO=${TMP_BIKO}${BLANK}${ALI}${COLON}${AMNT}
                # 集約した結果を出力
                IFS=$OLD_IFS
                echo "${TMP_LINE_1},\"${TMP_AMNT}\",${TMP_LINE_2},\"\",\"${TMP_BIKO}\"" >> ${FILE_PATH_KKIFM763}
                IFS=","
            fi
            TMP_AMNT=""
            TMP_BIKO=""
        fi
    fi

    # 退避して保持
    TMP_LINE_1="${1},${2},${3},${4},${5},${6},${7},${8},${9},${10}"
    TMP_LINE_2="${12},${13}"
    AMNT=$(echo ${11} | sed 's/"//g')
    ALI=$(echo ${14} | sed 's/"//g')
    LASTKEY=${KEY}

done < ${TMP_FILE_PATH_KKIFM752}

# 最終行が集約されているかの判断
if [ -s "${TMP_FILE_PATH_KKIFM752}" ]
then
    if [ "${TMP_AMNT}" = "" ]
    then
        # 集約が無いのでそのまま出力
        IFS=$OLD_IFS
        echo "${TMP_LINE_1},\"${AMNT}\",${TMP_LINE_2},\"${ALI}\",\"\"" >> ${FILE_PATH_KKIFM763}
        IFS=","
    else
        # 集約する最終行分の加算
        TMP_AMNT=`expr ${TMP_AMNT} + ${AMNT}`
        TMP_BIKO=${TMP_BIKO}${BLANK}${ALI}${COLON}${AMNT}
        # 集約した結果を出力
        IFS=$OLD_IFS
        echo "${TMP_LINE_1},\"${TMP_AMNT}\",${TMP_LINE_2},\"\",\"${TMP_BIKO}\"" >> ${FILE_PATH_KKIFM763}
        IFS=","
    fi
fi

IFS=${OLD_IFS}

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

P1="OPD=$OPD,"
P2="SVCCTL=JBSbatMatchServiceControl,"
P3="JOB=EO2GB0310J0,"
P4="IND1=KKIFM763.def,"
P5="INF1=${FILE_PATH_KKIFM763},"
P6="IND2=KKIFM753.def,"
P7="INF2=${TMP_FILE_PATH_KKIFM753},"
P8="OTD1=KKIFM754.def,"
P9="OTF1=${FILE_PATH_KKIFM754},"
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

sh ${G_TOOLSH}/EOK010210J0.sh CS00028I $JOBNAME

#
#--- 終了処理
#
# 一時ファイル削除
rm -f ${TMP_FILE_PATH_KKIFM752} ${TMP_FILE_PATH_KKIFM753}

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

exit $exit_rc
