#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：料金管理
#
# シェル名      ：前月課金対象従量サービス契約追加判定
#
# 機能          ：課金対象従量サービス契約と前月課金対象従量サービス契約を以下のマッチングキーにて突合し、課金対象従量サービス契約にのみ存在するレコードを出力する。
#その際、請求年月をスケジュール定義より取得した前月に置き換える。
#キー：請求先番号＞サービス番号＞サービス契約内訳番号＞オプションサービス契約番号＞電話番号＞事業者用契約ID
#
#
# コマンド形式  ：EO3013621J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v4.01           2013/05/27  FJ）狭間     【SG1-2013-0000082】課金対象従量サービス契約の前月契約遡及異動対応
# v5.00           2013/09/09  FJ）後藤     【OM-2013-0001780】整理番号更新処理追加
# v5.01           2013/10/07  FJ）菅原     【OM-2013-0002489】並列処理用ワークファイルのソート位置の変更
# v6.00           2013/12/09  FJ）狭間     【OM-2013-0004951】従量契約の工事完了報告遅延の前月反映条件改修
# v6.01           2013/12/17  FJ）後藤     【OM-2013-0005097】従量契約の前月反映改修（解約）
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

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

#---ワークファイル削除モード
WK_RM=true

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

#---マッチング処理でLeftjoinがNULL時に"を付けなくする（マッチング使用時は必須）
export ZTLQUOTES=''

#-------------------------------------------------------------
# シーケンス（PK情報）定義
#-------------------------------------------------------------
SEQFILE_DEF=ACIFM106.def
SEQFILE=${MID_DIR_AC}/ACIFM106010.csv
SEQOBJ_NAME=SEQ_CHRG_JSVKEI_CKS_NO

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

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

P1="OPD=,"
P2="SVCCTL=JBSbatMultiServiceControl,"
P3="JOB=EO3013621J0,"
P4="IND1=ACIFM062.def,"
P5="INF1=${MID_DIR_AC}/ACIFM062005.csv,"
P6="IND2=,"
P7="INF2=,"
P8="OTD1=ACIFM062.def,"
P9="OTF1=${MID_DIR_AC}/ACIFM062006.csv,"
P10="OTD2=,"
P11="OTF2=,"
P12="TABLENAME=,"
P13="SQLKEY=,"
P14="SQLPARAM=,"
P15="ERRFILE=,"
P16="RECOVERY=,"
P17="BREAKPTN=,"
P18="FREE=${SEQFILE_DEF};${SEQFILE};"
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

#-------------------------------------------------------------
#--- サブルーチン（UNLOAD）
#-------------------------------------------------------------
UNLOAD(){

#unload
sh ${G_TOOLSH}/EOKULD03.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
}

#--- 出力ファイル
#--- 前月課金対象従量サービス契約追加情報
OUTFILE_ACIFM062005=${MID_DIR_AC}/ACIFM062005.csv
OUTFILE_ACIFM062005_WK1=${MID_DIR_AC}/${JOBNAME}_ACIFM062005_WK1.csv
#--- 前月課金対象従量サービス契約情報（整理番号更新）
OUTFILE_ACIFM062008=${MID_DIR_AC}/ACIFM062008.csv
OUTFILE_ACIFM062008_WK1=${MID_DIR_AC}/${JOBNAME}_ACIFM062008_WK1.csv
OUTFILE_ACIFM062008_WK2=${MID_DIR_AC}/${JOBNAME}_ACIFM062008_WK2.csv
OUTFILE_ACIFM062008_WK3=${MID_DIR_AC}/${JOBNAME}_ACIFM062008_WK3.csv
OUTFILE_ACIFM062008_WK4=${MID_DIR_AC}/${JOBNAME}_ACIFM062008_WK4.csv
OUTFILE_ACIFM062008_WK5=${MID_DIR_AC}/${JOBNAME}_ACIFM062008_WK5.csv
OUTFILE_ACIFM062008_WK6=${MID_DIR_AC}/${JOBNAME}_ACIFM062008_WK6.csv
OUTFILE_ACIFM062008_WK7=${MID_DIR_AC}/${JOBNAME}_ACIFM062008_WK7.csv

#--- 入力ファイル
#--- 1.課金対象従量サービス契約情報
INFILE_ACIFM062001=${MID_DIR_AC}/ACIFM062001.csv
INFILE_ACIFM062001_WK1=${MID_DIR_AC}/${JOBNAME}_ACIFM062001_WK1.csv
#--- 2.前月課金対象従量サービス契約情報
INFILE_ACIFM062004=${MID_DIR_AC}/ACIFM062004.csv
INFILE_ACIFM062004_WK1=${MID_DIR_AC}/${JOBNAME}_ACIFM062004_WK1.csv
INFILE_ACIFM062004_WK2=${MID_DIR_AC}/${JOBNAME}_ACIFM062004_WK2.csv

#--- マッチング定義ファイル（AC_CM_0038）
DEFFILE_AC_CM_0038=${G_TOOLSH}/util/def/AC_CM_0038.def
DEFFILE_AC_CM_0038_WK1=${G_TOOLSH}/util/def/${JOBNAME}_AC_CM_0038_WK1.def

#--- マッチング定義ファイル（AC_CM_0061）
DEFFILE_AC_CM_0061=${G_TOOLSH}/util/def/AC_CM_0061.def
DEFFILE_AC_CM_0061_WK1=${G_TOOLSH}/util/def/${JOBNAME}_AC_CM_0061_WK1.def

#--- スケジュール定義CH_M_PRC_SCHDL_TEIGI
#スケジュール定義から請求年月（MIN）の当月取得
SQLFILE_CH0501_03=${SQL_DIR}/AC_U_CH0501_03.sql
SQLFILE_CH0501_03_WK=${SQL_DIR}/${JOBNAME}_AC_U_CH0501_03_WK1.sql

CSVFILE_CH0501=${MID_DIR_AC}/${JOBNAME}_AC_U_CH0501_WK1.csv

#
#--- 各ファイルの存在チェックを行う
#
#--- 1.課金対象従量サービス契約情報
if [ ! -r ${INFILE_ACIFM062001} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${INFILE_ACIFM062001}) "
    echo $JOBNAME " File is nonexist(${INFILE_ACIFM062001}) "
    exit ${G_RTN_ERROR}
fi
#--- 2.前月課金対象従量サービス契約情報
if [ ! -r ${INFILE_ACIFM062004} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${INFILE_ACIFM062004}) "
    echo $JOBNAME " File is nonexist(${INFILE_ACIFM062004}) "
    exit ${G_RTN_ERROR}
fi
#--- マッチング定義ファイル（AC_CM_0038）
if [ ! -r ${DEFFILE_AC_CM_0038} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${DEFFILE_AC_CM_0038}) "
    echo $JOBNAME " File is nonexist(${DEFFILE_AC_CM_0038}) "
    exit ${G_RTN_ERROR}
fi
#--- マッチング定義ファイル（AC_CM_0061）
if [ ! -r ${DEFFILE_AC_CM_0061} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${DEFFILE_AC_CM_0061}) "
    echo $JOBNAME " File is nonexist(${DEFFILE_AC_CM_0061}) "
    exit ${G_RTN_ERROR}
fi
#--- スケジュール定義CH_M_PRC_SCHDL_TEIGI
if [ ! -r ${SQLFILE_CH0501_03} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${SQLFILE_CH0501_03}) "
    echo $JOBNAME " File is nonexist(${SQLFILE_CH0501_03}) "
    exit ${G_RTN_ERROR}
fi

#
#---入力ファイルの改行コードをunix (LF)に変換する
#
tr -d "\r" < ${INFILE_ACIFM062001} > ${INFILE_ACIFM062001_WK1}
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " tr Error($SVC ${INFILE_ACIFM062001}:rc=$rc) "
    echo $JOBNAME " tr Error($SVC ${INFILE_ACIFM062001}:rc=$rc) "
    exit ${G_RTN_ERROR}
fi

tr -d "\r" < ${INFILE_ACIFM062004} > ${INFILE_ACIFM062004_WK1}
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " tr Error($SVC ${INFILE_ACIFM062004}:rc=$rc) "
    echo $JOBNAME " tr Error($SVC ${INFILE_ACIFM062004}:rc=$rc) "
    exit ${G_RTN_ERROR}
fi

#--- 前月課金対象従量サービス契約情報の末尾にマッチング判定用フラグを追加
bsortex \
  -copy \
  -record recform=txtcsv \
  -input reclen=500 \
    file=${INFILE_ACIFM062004_WK1} \
  -output file=${INFILE_ACIFM062004_WK2} \
    reconst="0.END,'1'.1asc"
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

#--- 前月課金対象従量サービス契約情報作成
(
#
#--- マッチング処理（課金対象従量サービス契約情報、前月課金対象従量サービス契約情報）
#
#--- マッチング入力ファイルセット
cp -f ${DEFFILE_AC_CM_0038} ${DEFFILE_AC_CM_0038_WK1}
sed -i -e "s%:ACIFM062001%${INFILE_ACIFM062001_WK1}%" ${DEFFILE_AC_CM_0038_WK1}
sed -i -e "s%:ACIFM062004%${INFILE_ACIFM062004_WK2}%" ${DEFFILE_AC_CM_0038_WK1}

#---  マッチング処理→入力ファイルへ
(export ZTLOUTFILE=${OUTFILE_ACIFM062005_WK1}
${G_TOOLSH}/util/bin/ZTLMAT01 ${DEFFILE_AC_CM_0038_WK1})
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " マッチング処理 Error($SVC ZTLOUTFILE:rc=$rc) "
    echo $JOBNAME " マッチング処理 Error($SVC ZTLOUTFILE:rc=$rc) "
    exit ${G_RTN_ERROR}
fi
exit_rc=0

if [ -s ${OUTFILE_ACIFM062005_WK1} ]
then
    #-- 当月取得
    cp -f ${SQLFILE_CH0501_03} ${SQLFILE_CH0501_03_WK}
    sed -i -e "s%:EVENT_CD%'02'%"          ${SQLFILE_CH0501_03_WK}
    sed -i -e "s%:EVENT_YMD%'${OPEDATE}'%" ${SQLFILE_CH0501_03_WK}
    UNLOAD ${SQLFILE_CH0501_03_WK} ${CSVFILE_CH0501}
    SEIKY_YM=`cat ${CSVFILE_CH0501}`
    TOGETU_Y=`expr ${SEIKY_YM} / 100`
    TOGETU_M=`expr ${SEIKY_YM} - ${TOGETU_Y} \* 100`
    #--- 前月取得
    if [ ${TOGETU_M} -eq 1 ];
    then
      ZENGETU_Y=`expr ${TOGETU_Y} - 1`
      ZENGETU_M=12
    else
      ZENGETU_Y=${TOGETU_Y}
      ZENGETU_M=`expr ${TOGETU_M} - 1`
    fi
    if [ ${ZENGETU_M} -lt 10 ];
    then
      ZENGETU="${ZENGETU_Y}"0"${ZENGETU_M}"
    else
      ZENGETU="${ZENGETU_Y}${ZENGETU_M}"
    fi

    #--- 課金対象従量サービス契約情報にのみ存在するレコードを抽出し、請求年月を前月に置き換え
    bsortex \
      -copy \
      -record recform=txtcsv \
      -input reclen=500 \
        file=${OUTFILE_ACIFM062005_WK1} \
        include="37.1asc.ne.'1'" \
      -output file=${OUTFILE_ACIFM062005} \
        reconst="0.14,1.1,2.2,3.3,4.12,5.20,6.12,7.12,8.10,'${ZENGETU}'.6asc,10.12,11.11,12.100,13.8,14.8,15.2,16.8,17.8,18.8,19.8,20.8,21.8,22.8,23.2,24.2,25.8,26.8,27.8,28.3,29.5,30.3,31.5,32.7,33.7,34.1,35.2,36.20"
        linedlmt=crlf
    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

    #
    #---ＡＰＬ起動
    #
    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

    #
    #---シーケンス更新
    #
    if [ $rc -le 8 ]
    then
       if [ -s ${MID_DIR_AC}/ACIFM062001.csv ]
       then
          sh ${G_TOOLSH}/EO3ALTERSEQ.sh ${SEQOBJ_NAME} ${SEQFILE} ${JOBNAME}

          altseqrc=$?
          if [ $altseqrc -ne 0 ]
          then
             ERRMSG=" シーケンス更新に失敗しました。${SEQOBJ_NAME} ($SVC alterseq:altseqrc=$altseqrc) "
             sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME ${ERRMSG}
             echo $JOBNAME ${ERRMSG}
             exit ${OUTFILE}
          fi
       fi
    fi
    exit_rc=$rc
fi
exit ${exit_rc}
) &
pid_ACIFM062006=$!

#--- 前月課金対象従量サービス契約情報作成（整理番号更新）
(
#
#--- マッチング処理2（前月課金対象従量サービス契約情報、課金対象従量サービス契約情報）
#
#--- マッチング入力ファイルセット
cp -f ${DEFFILE_AC_CM_0061} ${DEFFILE_AC_CM_0061_WK1}
sed -i -e "s%:ACIFM062001%${INFILE_ACIFM062001_WK1}%" ${DEFFILE_AC_CM_0061_WK1}
sed -i -e "s%:ACIFM062004%${INFILE_ACIFM062004_WK2}%" ${DEFFILE_AC_CM_0061_WK1}

#---  マッチング処理
(export ZTLOUTFILE=${OUTFILE_ACIFM062008_WK1}
${G_TOOLSH}/util/bin/ZTLMAT01 ${DEFFILE_AC_CM_0061_WK1})
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " マッチング処理2 Error($SVC ZTLOUTFILE:rc=$rc) "
    echo $JOBNAME " マッチング処理2 Error($SVC ZTLOUTFILE:rc=$rc) "
    exit ${G_RTN_ERROR}
fi

#---  整理番号更新処理
bsortex \
  -copy \
  -record recform=txtcsv \
  -input reclen=500 \
    file=${OUTFILE_ACIFM062008_WK1} \
  -output file=${OUTFILE_ACIFM062008_WK2} case="0.14asc.lt.'0'" reconst=1.END \
  -output file=${OUTFILE_ACIFM062008_WK3} case=other reconst=0.14,2.END
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 \
  -copy \
  -record recform=txtcsv \
  -input reclen=500 \
    file=${OUTFILE_ACIFM062008_WK2},${OUTFILE_ACIFM062008_WK3} \
  -output file=${OUTFILE_ACIFM062008_WK4} case="(19.8asc.lt.'0'.or.19.8asc.gt.1.8asc).and.1.8asc.gt.'0'" \
    reconst=0.14,4.8,5.8,6.4,7.1,8.2,9.3,10.12,11.20,12.12,13.12,14.10,15.6,16.12,17.11,18.100,1.8,20.8,21.4,22.8,23.8,24.8,25.8,26.8,27.8,28.8,29.2,30.2,2.8,3.8,4.8,34.END \
  -output file=${OUTFILE_ACIFM062008_WK5} case=other reconst=0.14,4.END
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 \
  -copy \
  -record recform=txtcsv \
  -input reclen=500 \
    file=${OUTFILE_ACIFM062008_WK4},${OUTFILE_ACIFM062008_WK5} \
  -output file=${OUTFILE_ACIFM062008_WK6} case="17.8asc.lt.'0'.and.2.8asc.gt.'0'" \
    reconst=0.14,4.1,5.2,6.3,7.12,8.20,9.12,10.12,11.10,12.6,13.12,14.11,15.100,16.8,2.8,3.4,19.8,20.8,21.8,22.8,23.8,24.8,25.8,26.2,27.2,28.8,29.8,1.8,31.END \
  -output file=${OUTFILE_ACIFM062008_WK7} case=other reconst=0.14,4.END
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 \
  -sort key="36.20asc" \
  -record recform=txtcsv \
  -input reclen=500 \
    file=${OUTFILE_ACIFM062008_WK6},${OUTFILE_ACIFM062008_WK7} \
  -output file=${OUTFILE_ACIFM062008} linedlmt=crlf 
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
) &
pid_ACIFM062008=$!

#--- 並列処理待ち受け
wait ${pid_ACIFM062006}
rc_ACIFM062006=$?

wait ${pid_ACIFM062008}
rc_ACIFM062008=$?

#--- 処理結果判定
#- エラー処理
if [ ${rc_ACIFM062006} -ne 0 ] || [ ${rc_ACIFM062008} -ne 0 ]
then
    #- エラーメッセージ出力
    if [ ${rc_ACIFM062006} -ne 0 ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " MATCHING ERROR(ACIFM062006:rc=${rc_ACIFM062006}) "
        echo $JOBNAME "MATCHING ERROR(ACIFM062006:rc=${rc_ACIFM062006}) "
    fi
    if [ ${rc_ACIFM062008} -ne 0 ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " MATCHING ERROR(ACIFM062008:rc=${rc_ACIFM062008}) "
        echo $JOBNAME "MATCHING ERROR(ACIFM062008:rc=${rc_ACIFM062008}) "
    fi
    #- 異常終了
    exit ${G_RTN_ERROR}
fi

#ワーク削除
if [ $WK_RM = "true" ]
then
    rm -f ${DEFFILE_AC_CM_0038_WK1}
    rm -f ${DEFFILE_AC_CM_0061_WK1}
    rm -f ${INFILE_ACIFM062001_WK1}
    rm -f ${INFILE_ACIFM062004_WK1}
    rm -f ${INFILE_ACIFM062004_WK2}
    rm -f ${CSVFILE_CH0501}
    rm -f ${SQLFILE_CH0501_03_WK}
    rm -f ${OUTFILE_ACIFM062005_WK1}
    rm -f ${OUTFILE_ACIFM062008_WK1}
    rm -f ${OUTFILE_ACIFM062008_WK2}
    rm -f ${OUTFILE_ACIFM062008_WK3}
    rm -f ${OUTFILE_ACIFM062008_WK4}
    rm -f ${OUTFILE_ACIFM062008_WK5}
    rm -f ${OUTFILE_ACIFM062008_WK6}
    rm -f ${OUTFILE_ACIFM062008_WK7}
fi

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

exit ${G_RTN_NORMAL}
