#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：契約管理
#
# シェル名      ：結果情報ファイル編集
#
# 機能          ：受信したＰＣセットアップ結果データファイルを編集する。
#編集したＰＣセットアップ結果データファイル、および件数ファイル、フラグファイルを対応履歴システムへ連携する。
#
# コマンド形式  ：EO29N0210J1.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v3.00         2012/08/20    FJ)藤原      【IT1-2012-0000956】日本PCサービス追加、5社同時に対応できるように修正
# v3.01         2012/10/25    FJ)砂川      【IT1-2012-0001633】結果ファイルにトレーラレコードがある場合、そのレコードの処理をスキップするように修正
#                                                              件数ファイルとフラグファイルがCSV形式の場合でも結果ファイルを選択して処理するように修正
# v9.00         2014/07/05    FJ)山裾      【ANK-2068-00-00】  PCセットアップデータ取り込み改善対応
#
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

#
#---業務で必要な変数定義
#
#xxx=xxxxxxx
# 2012/08/20 add start
# リターンコード初期値
exit_rc=0
TEMP="temp"
JPR="JPR"
ALH="ALH"
OBT="OBT"
JPC="JPC"
IPT="IPT"
for COMP in ${JPR} ${ALH} ${OBT} ${JPC} ${IPT}; do
# 2012/08/20 add end
    # システム日付
    #SYS_YMDHMSS=`date +'%Y%m%d%H%M%S'`
    . EOK010410J0.sh 2
    # 会社コード
    CD_DIV=""
    # PCセットアップ結果情報ファイル
    INFO_FILE=""
    # 会社別ファイル
    DATA_FILE=""
    # PCセットアップ結果データファイル
    INPUT_FILE=""

    # PCセットアップ結果情報ファイルを取得
# 2012/08/20 del start
#    INFO_FILE=`find ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/TEMP* | tail -1`
# 2012/08/20 del end
# 2012/08/20 add start
    INFO_FILE=`find ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/${COMP}/${TEMP}* | tail -1`
# 2012/08/20 add end
    if [ "${INFO_FILE}" != "" ]
    then
# 2012/08/20 add start
        DATA_FILE=`find ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/${COMP}/${COMP}* | tail -1`
        if [ ${COMP} == ${JPR} ]
        then
            CD_DIV="02"
        fi
        if [ ${COMP} == ${ALH} ]
        then
            CD_DIV="03"
        fi
        if [ ${COMP} == ${OBT} ]
        then
            CD_DIV="04"
        fi
        if [ ${COMP} == ${JPC} ]
        then
            CD_DIV="05"
        fi
        if [ ${COMP} == ${IPT} ]
        then
            CD_DIV="06"
        fi
# 2012/08/20 add end
# 2012/08/20 del start
#        if [ "${DATA_FILE}" == "" ]
#        then
#            # ＪＡＰＲＯのファイルを取得
#            DATA_FILE=`find ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/JPR1* | tail -1`
#            CD_DIV="02"
#        fi
#        if [ "${DATA_FILE}" == "" ]
#        then
#            # アルファ通信のファイルを取得
#            DATA_FILE=`find ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/ALH1* | tail -1`
#            CD_DIV="03"
#        fi
#        if [ "${DATA_FILE}" == "" ]
#        then
#            # オービットのファイルを取得
#            DATA_FILE=`find ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/OBT1* | tail -1`
#            CD_DIV="04"
#        fi
#        if [ "${DATA_FILE}" == "" ]
#        then
#            # ＩＰテクノサービス
#            DATA_FILE=`find ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/IPT1* | tail -1`
#            CD_DIV="06"
#        fi
# 2012/08/20 del end

        if [ "${DATA_FILE}" != "" ]
        then
            # バックアップディレクトリにファイルを複写
            cp ${INFO_FILE} ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/bk/TEMP.tar.z

            # 複写したファイルを解凍
            gunzip ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/bk/TEMP.tar.z
 
            # 解凍したファイルを展開
            tar -C ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/bk/ -xf ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/bk/TEMP.tar

            # 展開したファイルからPCセットアップ結果データファイルを取得
# 2012/10/24 IT1-2012-0001633 Delete Start
#            INPUT_FILE=`find ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/bk/CASE_SUKEKKA*.csv | tail -1`
# 2012/10/24 IT1-2012-0001633 Delete End
# 2012/10/24 IT1-2012-0001633 Add Start
            # 展開したファイルからPCセットアップ結果データファイルを取得

            # 結果ファイル判定用一時ファイル
            TEMP_FILE="TEMP_FILE"

            # 展開ファイル名称保持用一時ファイル
            TEMP_FILE2="TEMP_FILE2"

            # 展開ファイル名称保持用一時ファイル編集用一時ファイル
            TEMP_FILE3="TEMP_FILE3"

            # 件数ファイル識別用
            CNT_W="CNT"

            # フラグファイル識別用
            FLG_W="FLG"

            # 展開ファイルから結果ファイル名称と一致するファイルを展開ファイル名称保持用一時ファイルに保持
            find ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/bk/ -iname CASE_SUKEKKA*.csv > $TEMP_FILE2

            # 展開ファイル名称保持用一時ファイルから最終行の名称を取得
            INPUT_FILE=`tail -1 $TEMP_FILE2`

            # ファイル名のみを抜き取り、件数ファイルまたはフラグファイルで無いかを判定
            basename ${INPUT_FILE} > $TEMP_FILE
            CNT_CHK=`grep -i ${CNT_W} ${TEMP_FILE}`
            FLG_CHK=`grep -i ${FLG_W} ${TEMP_FILE}`
            rm $TEMP_FILE
            if [ "${CNT_CHK}" != "" ] || [ "${FLG_CHK}" != "" ]
            then

                # 件数ファイルまたはフラグファイルであった場合、展開ファイル名称保持用一時ファイルの最終行のレコードを削除する。
                # 再び最終行のレコードを取得し、結果ファイルか否かを判定する。

                cat $TEMP_FILE2 | sed -e '$d' > $TEMP_FILE3
                mv $TEMP_FILE3 $TEMP_FILE2
                INPUT_FILE=`tail -1 $TEMP_FILE2`
                basename ${INPUT_FILE} > $TEMP_FILE
                CNT_CHK=`grep -i ${CNT_W} ${TEMP_FILE}`
                FLG_CHK=`grep -i ${FLG_W} ${TEMP_FILE}`
                rm $TEMP_FILE
                if [ "${CNT_CHK}" != "" ] || [ "${FLG_CHK}" != "" ]
                then

                    # 最大で３レコードなので、ここではチェックを行わずにファイル名をそのまま取得する。
                    cat $TEMP_FILE2 | sed -e '$d' > $TEMP_FILE3
                    mv $TEMP_FILE3 $TEMP_FILE2
                    INPUT_FILE=`tail -1 $TEMP_FILE2`
                fi
            fi
            rm $TEMP_FILE2
# 2012/10/24 IT1-2012-0001633 Add End

# 2012/10/24 IT1-2012-0001633 Add Start
            # PCセットアップ結果データファイルの最終レコードがトレーラレコード("END")の場合は削除する
            if [ "${INPUT_FILE}" != "" ]
            then
                if [ -s ${INPUT_FILE} ]
                then
                    last_line=""

                    # 結果ファイルの最終レコードを取得。
                    last_line=`tail -n 1 ${INPUT_FILE}`

                    # 改行コードを外すために5桁目までを取得する。
                    last_line=`echo ${last_line} | cut -c 1-7`

                    # トレーラレコード("[END]")
                    end_cd='"[END]"'
                    if [ ${last_line} != "" ]
                    then
                        if [ ${last_line} == ${end_cd} ]
                        then

                            # 最終レコードがトレーラレコードの場合、そのレコードを削除する。
                            cat $INPUT_FILE | sed -e '$d' > $TEMP_FILE
                            mv ${TEMP_FILE} ${INPUT_FILE}
# 2014/07/05 ANK-2068-00-00 Add Start
                        else
                            last_line2=""

                            # 結果ファイルの最終レコードを取得。
                            last_line2=`tail -n 1 ${INPUT_FILE}`

                            # 改行コードを外すために5桁目までを取得する（ダブルクォートなしの場合）。
                            last_line2=`echo ${last_line2} | cut -c 1-5`

                            # トレーラレコード([END])
                            end_cd2='[END]'

                            if [ ${last_line2} != "" ]
                            then
                                if [ ${last_line2} == ${end_cd2} ]
                                then

                                    # 最終レコードがトレーラレコードの場合、そのレコードを削除する。
                                    cat $INPUT_FILE | sed -e '$d' > $TEMP_FILE
                                    mv ${TEMP_FILE} ${INPUT_FILE}
                                fi
                            fi
# 2014/07/05 ANK-2068-00-00 Add End
                        fi
                    fi
                fi
            fi
# 2012/10/24 IT1-2012-0001633 Add End
        fi
    
# 2014/07/05 ANK-2068-00-00 Add Start
        # 加工済みPCセットアップ結果データファイル
        EDIT_INPUT_FILE=${MID_DIR_KK}/KKIFE156_${CD_DIV}_${RSLT_SYSDATE}.csv
        EDIT_INPUT_FILE_TMP01=${MID_DIR_KK}/KKIFE156_${CD_DIV}_${RSLT_SYSDATE}_TMP01.csv
        EDIT_INPUT_FILE_TMP02=${MID_DIR_KK}/KKIFE156_${CD_DIV}_${RSLT_SYSDATE}_TMP02.csv
        EDIT_INPUT_FILE_TMP03=${MID_DIR_KK}/KKIFE156_${CD_DIV}_${RSLT_SYSDATE}_TMP03.csv
        cat ${INPUT_FILE} > ${EDIT_INPUT_FILE}
        
        # ｂ．「""""""」を「""」に変換
        sed -i -e 's/\"\"\"\"\"\"/\"\"/g'  ${EDIT_INPUT_FILE}
        
        # ｃ．「" "」を「""」に変換
        sed -i -e 's/\" \"/\"\"/g'  ${EDIT_INPUT_FILE}
        
        # ｄ．「,,」を「,"",」に変換
        sed -i -e 's/,,/,\"\",/g'  ${EDIT_INPUT_FILE}
        sed -i -e 's/,,/,\"\",/g'  ${EDIT_INPUT_FILE}
        
        # ｅ．先頭１文字が「"」の場合、改行コード変換
        FIRST_CHR=`head -1 ${EDIT_INPUT_FILE} | cut -c 1`
        
        if [ "${FIRST_CHR}" == '"' ]
        then
            # 「"CRLF」を「"CR」に変換
            sed ':loop; N; $!b loop; ;s/\"\r\n/\"\\r/g' ${EDIT_INPUT_FILE} > ${EDIT_INPUT_FILE_TMP01}
            
            # 「CRLF」を「\r\n」に変換
            sed ':loop; N; $!b loop; ;s/\r\n/\\r\\n/g' ${EDIT_INPUT_FILE_TMP01} > ${EDIT_INPUT_FILE_TMP02}
            
            # 「"CR」を「"CRLF」に変換
            cat ${EDIT_INPUT_FILE_TMP02} > ${EDIT_INPUT_FILE_TMP03}
            sed -i -e 's/\"\\r/\"\r\n/g'  ${EDIT_INPUT_FILE_TMP03}
            
            # 作業ファイルの戻し
            cat ${EDIT_INPUT_FILE_TMP03} > ${EDIT_INPUT_FILE}
            
        # ｆ．先頭１文字が「"」の以外場合、CSV形式変換
        else
            # 「"」を「」に変換（除去）
            sed -i -e 's/\"//g'  ${EDIT_INPUT_FILE}
            
            # 「,」を「","」に変換
            sed -i -e 's/,/\",\"/g'  ${EDIT_INPUT_FILE}
            
            # 「CRLF」を「LF」に変換
            dos2unix < ${EDIT_INPUT_FILE} > ${EDIT_INPUT_FILE_TMP01}
            
            # 先頭行に「"」を付加
            sed -i -e 's/^/\"/g' ${EDIT_INPUT_FILE_TMP01}
            
            # 最終行に「"」を付加
            sed -i -e 's/$/\"/g' ${EDIT_INPUT_FILE_TMP01}
            
            # 「LF」を「CRLF」に変換
            unix2dos < ${EDIT_INPUT_FILE_TMP01} > ${EDIT_INPUT_FILE}
        fi
# 2014/07/05 ANK-2068-00-00 Add End

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

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

    P1="OPD=,"
    P2="SVCCTL=JBSbatMultiServiceControl,"
    P3="JOB=EO29N0210J1,"
    P4="IND1=KKIFE151.def,"
# 2014/07/05 ANK-2068-00-00 Mod Start
#    P5="INF1=${INPUT_FILE},"
    P5="INF1=${EDIT_INPUT_FILE},"
# 2014/07/05 ANK-2068-00-00 Mod End
    P6="IND2=,"
    P7="INF2=,"
    P8="OTD1=CRIFE016.def,"
    #P9="OTF1=${SEND_DIR}/CASE_SUKEKKA_${SYS_YMDHMSS}.CSV,"
    P9="OTF1=${SEND_DIR}/CASE_SUKEKKA_${RSLT_SYSDATE}.CSV,"
    P10="OTD2=,"
    P11="OTF2=,"
    P12="TABLENAME=,"
    P13="SQLKEY=,"
    P14="SQLPARAM=,"
    P15="ERRFILE=,"
    P16="RECOVERY=,"
    P17="BREAKPTN=,"
    #P18="FREE=${CD_DIV};${SEND_DIR}/CASE_SUKEKKA_${SYS_YMDHMSS}_CNT.TXT"
    P18="FREE=${CD_DIV};${SEND_DIR}/CASE_SUKEKKA_${RSLT_SYSDATE}_CNT.TXT"
    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

    #
    #---ＡＰＬ起動
    #

    if [ "${INPUT_FILE}" != "" ]
    then
        java ${JAVA_OPTION} -jar ${JAR_DIR}/koptBatch.jar $PARA
    fi

    rc=$?
    ERR_FLG=0

# 2014/07/05 ANK-2068-00-00 Add Start
    # 出力ファイルが存在する場合は改行コード変換
    if [ -e ${SEND_DIR}/CASE_SUKEKKA_${RSLT_SYSDATE}.CSV ]
    then
        sed -i -e 's/\\r\\n/\r\n/g'  ${SEND_DIR}/CASE_SUKEKKA_${RSLT_SYSDATE}.CSV
    fi
# 2014/07/05 ANK-2068-00-00 Add End

    if [ $rc -ne 0 ]
    then
       if [ $rc -ne 4 ]
       then
           if [ $rc -ne 8 ]
           then
               # 出力ファイルが存在する場合は削除
               #if [ -e ${SEND_DIR}/CASE_SUKEKKA_${SYS_YMDHMSS}.CSV ]
               if [ -e ${SEND_DIR}/CASE_SUKEKKA_${RSLT_SYSDATE}.CSV ]
               then
                   #rm -f ${SEND_DIR}/CASE_SUKEKKA_${SYS_YMDHMSS}.CSV
                   rm -f ${SEND_DIR}/CASE_SUKEKKA_${RSLT_SYSDATE}.CSV
               fi
               #if [ -e ${SEND_DIR}/CASE_SUKEKKA_${SYS_YMDHMSS}_CNT.TXT ]
               if [ -e ${SEND_DIR}/CASE_SUKEKKA_${RSLT_SYSDATE}_CNT.TXT ]
               then
                   #rm -f ${SEND_DIR}/CASE_SUKEKKA_${SYS_YMDHMSS}_CNT.TXT
                   rm -f ${SEND_DIR}/CASE_SUKEKKA_${RSLT_SYSDATE}_CNT.TXT
               fi

               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

    if [ "${INFO_FILE}" != "" ] && [ "${DATA_FILE}" != "" ]
    then
        if [ -e ${INFO_FILE} ]
        then
            # システム日付を付与
            #mv ${INFO_FILE} ${INFO_FILE}_${SYS_YMDHMSS}
            mv ${INFO_FILE} ${INFO_FILE}_${RSLT_SYSDATE}
            # バックアップディレクトリに移動
            #mv ${INFO_FILE}_${SYS_YMDHMSS} ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/bk/
            mv ${INFO_FILE}_${RSLT_SYSDATE} ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/bk/
        fi
        if [ -e ${DATA_FILE} ]
        then
            # システム日付を付与
            #mv ${DATA_FILE} ${DATA_FILE}_${SYS_YMDHMSS}
            mv ${DATA_FILE} ${DATA_FILE}_${RSLT_SYSDATE}
            # バックアップディレクトリに移動
            #mv ${DATA_FILE}_${SYS_YMDHMSS} ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/bk/
            mv ${DATA_FILE}_${RSLT_SYSDATE} ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/bk/
        fi
        # 展開したファイルを削除
        for fname in $(tar -tf ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/bk/TEMP.tar); do
            rm -f ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/bk/$fname
        done
        # 解凍したファイルを削除
        if [ -e ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/bk/TEMP.tar ]
        then
            rm -f ${GAIBU_RECEIVE_DIR_KK}/KKIFE156/bk/TEMP.tar
        fi

        # PCセットアップ結果データファイルが存在しない場合はエラー
        if [ "${INPUT_FILE}" == "" ]
        then
            sh ${G_TOOLSH}/EOK010210J0.sh CS00028I $JOBNAME
            sh ${G_TOOLSH}/EOK010210J0.sh CS00026I $JOBNAME
            exit ${G_RTN_WARN}
        fi
    fi

    # 出力したデータファイルが0バイトの場合、作成したファイルを削除
    #if [ -e ${SEND_DIR}/CASE_SUKEKKA_${SYS_YMDHMSS}.CSV ]
    if [ -e ${SEND_DIR}/CASE_SUKEKKA_${RSLT_SYSDATE}.CSV ]
    then
    #    set -- `ls -l "${SEND_DIR}/CASE_SUKEKKA_${SYS_YMDHMSS}.CSV"`
        set -- `ls -l "${SEND_DIR}/CASE_SUKEKKA_${RSLT_SYSDATE}.CSV"`
        fsize=$5
        if [ $fsize == "0" ]
        then
    #        rm -f ${SEND_DIR}/CASE_SUKEKKA_${SYS_YMDHMSS}.CSV
    #        rm -f ${SEND_DIR}/CASE_SUKEKKA_${SYS_YMDHMSS}_CNT.TXT
            rm -f ${SEND_DIR}/CASE_SUKEKKA_${RSLT_SYSDATE}.CSV
            rm -f ${SEND_DIR}/CASE_SUKEKKA_${RSLT_SYSDATE}_CNT.TXT
        fi
    fi

# 2012/08/20 add start
    # rcの方が大きい(ループ中の一番高いエラーを返却)
    if [ ${exit_rc} -lt ${rc} ]
    then
        exit_rc=$rc
    fi
# 2012/08/20 add end
# 2012/08/20 del start
#    exit_rc=$rc
# 2012/08/20 del end
# 2012/08/20 add start
done
# 2012/08/20 add end

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

exit $exit_rc
