#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：契約管理
#
# シェル名      ：有効VA機器リスト生成（当月）
#
# 機能          ：1. サービス契約スキーマ抽出ファイル（KKIFM293001_sort.csv）、
#                    当日異動出力ファイル（KKIFM019023_01.csv）から
#                    抽出条件を満たすカレントレコードを抽出する。
#                 
#                 2. 機器提供サービス契約スキーマ抽出ファイル(KKIFM297001_sort.csv)、
#                    当日異動出力ファイル（KKIFM019023_01.csv）から
#                    抽出条件を満たすカレントレコードを抽出する。
#                 
#                 3. サービス契約スキーマ抽出ファイル、機器提供サービス契約スキーマ抽出ファイル、
#                    1.2.で取得したデータをマッチングし、有効VA機器リストを生成する。
#
# コマンド形式  ：EO21D012FJ0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v19.00.00      2015/11/02   FJ)土井      OM-2015-0002824 新規作成
# v23.00.00      2016/02/24   FJ)安井      OM-2016-0000346 課金開始終了逆転VA機器対象外化
#
#
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

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

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

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

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

#
#--- ファイル定義
#
# KK_T_KKTK_SVC_KEI (IN)
IN_FILE_1=${LOC_DIR_KK}/KKIFM297001_sort.csv
IN_FILE_1_MATCH=${LOC_DIR_KK}/${JOBNAME}_KKIFM297001_sort_match.csv
# KK_T_KKTK_SVC_KEI (IN)
IN_FILE_1_SORT_1=${LOC_DIR_KK}/${JOBNAME}_KKIFM297001_srt.csv
# KK_T_KKTK_SVC_KEI (IN)
IN_FILE_1_SORT_2=${LOC_DIR_KK}/${JOBNAME}_KKIFM297001_srt2.csv
# KK_T_KKTK_SVC_KEI (IN)
IN_FILE_1_MRG_1=${LOC_DIR_KK}/${JOBNAME}_KKIFM297001_mrg1.csv
# KK_T_KKTK_SVC_KEI (IN)
IN_FILE_1_MRG_2=${LOC_DIR_KK}/${JOBNAME}_KKIFM297001_mrg2.csv
# KK_T_KKTK_SVC_KEI (IN)
IN_FILE_1_MRG=${LOC_DIR_KK}/${JOBNAME}_KKIFM297001_mrg.csv
# KK_T_KKTK_SVC_KEI (IN)
IN_FILE_1_SORT=${LOC_DIR_KK}/${JOBNAME}_KKIFM297002_pre.csv

# KK_T_SVC_KEI      (IN)
IN_FILE_2=${LOC_DIR_KK}/KKIFM293001_sort.csv
IN_FILE_2_MATCH=${LOC_DIR_KK}/${JOBNAME}_KKIFM293001_sort_match.csv

# KKTK_GENE         (OUT -> IN)
TMP_FILE_1=${LOC_DIR_KK}/${JOBNAME}_KKIFM297002.csv

# K_GENE            (OUT -> IN)
TMP_FILE_2=${LOC_DIR_KK}/${JOBNAME}_KKIFM293009.csv

# KK_T_KKTK_SVC_KEI（EO21D012CJ0作成：IN)
IN_FILE_3=${MID_DIR_KK}/KKIFM019023_01.csv
IN_FILE_3_MRG_1=${LOC_DIR_KK}/${JOBNAME}_KKIFM019023_01_mrg1.csv
IN_FILE_3_MRG_2=${LOC_DIR_KK}/${JOBNAME}_KKIFM019023_01_mrg2.csv

#
#--- 各ファイルの存在チェックを行う
#
func_file_exist () {
    if [ ! -r ${1} ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E ${JOBNAME} " File is nonexist(${1}) "
        echo ${JOBNAME} " File is nonexist(${1}) "
        exit ${G_RTN_ERROR}
    fi
}
func_file_exist ${IN_FILE_1}
func_file_exist ${IN_FILE_2}
func_file_exist ${IN_FILE_3}
DEFFILE=${G_TOOLSH}/util/def/KK_CM_0559.def
func_file_exist ${DEFFILE}
DEFFILE=${G_TOOLSH}/util/def/KK_CM_0560.def
func_file_exist ${DEFFILE}
DEFFILE=${G_TOOLSH}/util/def/KK_CM_0561.def
func_file_exist ${DEFFILE}

#
#--- 出力ファイルのクリアを行う
#
func_file_cat () {
    cat /dev/null > ${1}
    rc=$?
    if [ ${rc} -ne 0 ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E ${JOBNAME} " File cat error(${1}:rc=${rc}) "
        echo $JOBNAME " File cat error(${1}:rc=${rc}) "
        exit ${G_RTN_ERROR}
    fi
}
func_file_cat ${IN_FILE_1_SORT}
func_file_cat ${TMP_FILE_1}
func_file_cat ${TMP_FILE_2}
# OUTPUT            (OUT)
OUTFILE=${MID_DIR_KK}/KKIFM442003.csv
func_file_cat ${OUTFILE}

#
#--- 当月処理
#

# 当月を対象とする
OPEDATE_YYYYMM=`echo ${RSLT_OPEDATE} |cut -c 1-6`
OPEDATE_STADAY=${OPEDATE_YYYYMM}"01"
NDATE=`date -d "1 month ${OPEDATE_STADAY}" +'%Y%m%d'`
EDAY=`date -d "1 day ago ${NDATE}" +'%d'`
OPEDATE_ENDDAY=`echo ${OPEDATE_STADAY} |cut -c 1-6`${EDAY}

#
#--機器提供サービス契約差分情報抽出（サービス契約・当月）データから
#  機器提供サービス契約番号とサービス契約番号を抽出
#
bsortex -merge key=8.12asc -record recform=txtcsv \
        -input file=${IN_FILE_3} reclen=700 \
         include="6.4asc.eq.'C004'" \
        -summary suppress -output file=${IN_FILE_3_MRG_1} reconst="8.12,1.10" linedlmt=lf
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " MERGE Error($SVC merge:rc=$rc) "
    echo $JOBNAME " SORT Error($SVC merge:rc=$rc) "
    exit ${G_RTN_ERROR}
fi

#
#--- 入力ファイルにダブルクォーテーションを付加
#
sed -i -e "s/,/\",\"/g" ${IN_FILE_3_MRG_1}
sed -i -e "s/^/\"/" ${IN_FILE_3_MRG_1}
sed -i -e "s/$/\"/" ${IN_FILE_3_MRG_1}

#
#--上記抽出データからサービス契約番号を抽出
#
#
bsortex -sort key=1.10asc -record recform=txtcsv \
        -input file=${IN_FILE_3_MRG_1} reclen=30 \
        -summary suppress -output file=${IN_FILE_3_MRG_2} reconst="1.10"
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

#
#--- ファイル定義
#
DEFFILE=${G_TOOLSH}/util/def/KK_CM_0559.def
TMPDEFFILE=${ULD_WORK_DIR}/KK_CM_0559.tmp.${JOBNAME}.def
OUTFILE=${IN_FILE_2_MATCH}

#
#--- 定義ファイル環境変数設定処理
#
cat ${DEFFILE} > ${TMPDEFFILE}
sed -i -e s@'${LOC_DIR_KK}'@${LOC_DIR_KK}@g ${TMPDEFFILE}

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


# 
#
#--- サービス契約スキーマ抽出ファイルから抽出条件を満たすレコードを抽出する。
#    <sort>
#     0:10asc:SVC_KEI_NO
#    12: 8asc:RSV_APLY_YMD
#     1:17asc:GENE_ADD_DTM
#    <include>
#    13: 1asc:RSV_APLY_CD = '2'
#    12: 8asc:RSV_APLY_YMD <= ${RSLT_OPEDATE}
#    29: 1asc:MK_FLG = '0'
#     5: 3asc:PCRS_CD IN ('A31', 'A32')
#     9: 8asc:PLAN_CHRG_STAYMD <= ${OPEDATE_ENDDAY}
#    10: 8asc:PLAN_CHRG_ENDYMD >= ${OPEDATE_STADAY}
bsortex -merge key=0.10asc -record recform=txtcsv -input file=${IN_FILE_2_MATCH} reclen=330 \
include="(5.3asc.eq.'A31'.or.5.3asc.eq.'A32'), (9.8asc.le.'${OPEDATE_ENDDAY}'.and.10.8asc.ge.'${OPEDATE_STADAY}')" \
-summary suppress last \
-output file=${TMP_FILE_2}
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " MERGE Error($SVC merge:rc=$rc) "
    echo $JOBNAME " SORT Error($SVC merge:rc=$rc) "
    exit ${G_RTN_ERROR}
fi

#
#--- ファイル定義
#
DEFFILE=${G_TOOLSH}/util/def/KK_CM_0560.def
TMPDEFFILE=${ULD_WORK_DIR}/KK_CM_0560.tmp.${JOBNAME}.def
OUTFILE=${IN_FILE_1_MATCH}

#
#--- 定義ファイル環境変数設定処理
#
cat ${DEFFILE} > ${TMPDEFFILE}
sed -i -e s@'${LOC_DIR_KK}'@${LOC_DIR_KK}@g ${TMPDEFFILE}

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

#
#--- 機器提供サービス契約スキーマ抽出ファイルから抽出条件を満たすレコードを抽出する。
#    <sort>
#     0:12asc:KKTK_SVC_KEI_NO
#     4: 6asc:PPLAN_CD
#    11: 8asc:RSV_APLY_YMD
#     1:17asc:GENE_ADD_DTM
#    <include>
#    12: 1asc:RSV_APLY_CD = '2'
#    11: 8asc:RSV_APLY_YMD <= ${RSLT_OPEDATE}
#    30: 1asc:MK_FLG = '0'
#     6: 2asc:OYA_KEI_SKBT_CD = '01'
#     2: 4asc:KKTK_SVC_CD = 'C004'
#     4: 6asc:PPLAN_CD IN ('PC0401', 'PC0501')
bsortex -sort  key=0.12asc,4.6asc,11.8asc,1.17asc -record recform=txtcsv -input file=${IN_FILE_1_MATCH} reclen=350 \
 -output file=${IN_FILE_1_SORT_1}
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

#
#--- 機器提供サービス契約スキーマ抽出ファイルから機器提供サービス契約番号・料金プランコードごとのカレントレコードを抽出する。
#    <merge>
#     0:12asc:KKTK_SVC_KEI_NO
#     4: 6asc:PPLAN_CD
#    <include>
#    14: 8asc:PLAN_CHRG_STAYMD <= ${OPEDATE_ENDDAY}
#    14: 8asc:PLAN_CHRG_STAYMD IS NOT NULL OM-2013-0004005対応
#    14: 8asc:PLAN_CHRG_STAYMD <= 15: 8asc:PLAN_CHRG_ENDYMD OM-2016-0000346対応
#    15: 8asc:PLAN_CHRG_ENDYMD >= ${OPEDATE_STADAY}
#OM-2016-0000346 MOD STA
#bsortex -merge key=0.12asc,4.6asc -record recform=txtcsv -input file=${IN_FILE_1_SORT_1} reclen=400 \
#-summary suppress last -output file=${IN_FILE_1_MRG_1} \
#include="(14.8asc.le.'${OPEDATE_ENDDAY}'.and.14.8asc.ge.'0'.and.15.8asc.ge.'${OPEDATE_STADAY}')" \
#reconst="0.12,1.17,2.4,3.3,4.6,5.12,6.2,7.10,8.12,9.12,10.12,11.8,12.1,13.8,14.8,15.8,16.1,17.8,18.8,19.2,20.8,21.8,22.8,23.8,24.8,25.2,26.8,27.8,28.1,29.5,30.1,31.2,'1'.1ascA"
bsortex -merge key=0.12asc,4.6asc -record recform=txtcsv -input file=${IN_FILE_1_SORT_1} reclen=400 \
-summary suppress last -output file=${IN_FILE_1_MRG_1} \
include="(14.8asc.le.'${OPEDATE_ENDDAY}'.and.14.8asc.ge.'0'.and.14.8asc.le.15.8asc.and.15.8asc.ge.'${OPEDATE_STADAY}')" \
reconst="0.12,1.17,2.4,3.3,4.6,5.12,6.2,7.10,8.12,9.12,10.12,11.8,12.1,13.8,14.8,15.8,16.1,17.8,18.8,19.2,20.8,21.8,22.8,23.8,24.8,25.2,26.8,27.8,28.1,29.5,30.1,31.2,'1'.1ascA"
#OM-2016-0000346 MOD END
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " MERGE Error($SVC merge:rc=$rc) "
    echo $JOBNAME " SORT Error($SVC merge:rc=$rc) "
    exit ${G_RTN_ERROR}
fi

#
#--- 機器提供サービス契約スキーマ抽出ファイルから対象月課金中履歴レコードを抽出する。
#    <merge>
#     0:12asc:KKTK_SVC_KEI_NO
#     4: 6asc:PPLAN_CD
#    <include>
#    14: 8asc:PLAN_CHRG_STAYMD <= ${OPEDATE_ENDDAY}
#    14: 8asc:PLAN_CHRG_STAYMD IS NOT NULL OM-2013-0004005対応
#    14: 8asc:PLAN_CHRG_STAYMD <= 15: 8asc:PLAN_CHRG_ENDYMD
#    15: 8asc:PLAN_CHRG_ENDYMD >= ${OPEDATE_STADAY}
#    15: 8asc:PLAN_CHRG_ENDYMD <> '20991231'
#OM-2016-0000346 MOD STA
#bsortex -merge key=0.12asc,4.6asc -record recform=txtcsv -input file=${IN_FILE_1_SORT_1} reclen=400 \
#include="(14.8asc.le.'${OPEDATE_ENDDAY}'.and.14.8asc.ge.'0'.and.15.8asc.ge.'${OPEDATE_STADAY}'.and.15.8asc.ne.'20991231')" \
#-summary suppress last -output file=${IN_FILE_1_MRG_2} \
#reconst="0.12,1.17,2.4,3.3,4.6,5.12,6.2,7.10,8.12,9.12,10.12,11.8,12.1,13.8,14.8,15.8,16.1,17.8,18.8,19.2,20.8,21.8,22.8,23.8,24.8,25.2,26.8,27.8,28.1,29.5,30.1,31.2,'0'.1ascA"
bsortex -merge key=0.12asc,4.6asc -record recform=txtcsv -input file=${IN_FILE_1_SORT_1} reclen=400 \
include="(14.8asc.le.'${OPEDATE_ENDDAY}'.and.14.8asc.ge.'0'.and.14.8asc.le.15.8asc.and.15.8asc.ge.'${OPEDATE_STADAY}'.and.15.8asc.ne.'20991231')" \
-summary suppress last -output file=${IN_FILE_1_MRG_2} \
reconst="0.12,1.17,2.4,3.3,4.6,5.12,6.2,7.10,8.12,9.12,10.12,11.8,12.1,13.8,14.8,15.8,16.1,17.8,18.8,19.2,20.8,21.8,22.8,23.8,24.8,25.2,26.8,27.8,28.1,29.5,30.1,31.2,'0'.1ascA"
#OM-2016-0000346 MOD END
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " MERGE Error($SVC merge:rc=$rc) "
    echo $JOBNAME " SORT Error($SVC merge:rc=$rc) "
    exit ${G_RTN_ERROR}
fi

#
#--- 機器提供サービス契約スキーマ抽出ファイルを優先順位順にソートする。
#    <sort>
#     0:12asc:KKTK_SVC_KEI_NO
#     4: 6asc:PPLAN_CD
#    32: 1asc:優先順位
bsortex -sort  key=0.12asc,4.6asc,32.1asc -record recform=txtcsv -input file=${IN_FILE_1_MRG_1},${IN_FILE_1_MRG_2} reclen=400 -output file=${IN_FILE_1_SORT_2}
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
#
#--- 機器提供サービス契約スキーマ抽出ファイルから対象月有効レコードを抽出する。
#    <merge>
#     0:12asc:KKTK_SVC_KEI_NO
#     4: 6asc:PPLAN_CD
bsortex -merge key=0.12asc,4.6asc -record recform=txtcsv -input file=${IN_FILE_1_SORT_2} reclen=400 -summary suppress last -output file=${IN_FILE_1_MRG}
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " MERGE Error($SVC merge:rc=$rc) "
    echo $JOBNAME " SORT Error($SVC merge:rc=$rc) "
    exit ${G_RTN_ERROR}
fi

#
#--- 機器提供サービス契約スキーマ抽出ファイルをサービス契約番号・予約適用年月日・世代登録年月日でソートする。
#    <sort>
#     7:10asc:SVC_KEI_NO
#    32: 1asc:優先順位
#    14: 8asc:PLAN_CHRG_STAYMD
#    11: 8asc:RSV_APLY_YMD
#     1:17asc:GENE_ADD_DTM
#    <include>
#    12: 1asc:RSV_APLY_CD = '2'
#    11: 8asc:RSV_APLY_YMD <= ${RSLT_OPEDATE}
#    30: 1asc:MK_FLG = '0'
bsortex -sort  key=7.10asc,32.1asc,14.8asc,11.8asc,1.17asc -record recform=txtcsv -input file=${IN_FILE_1_MRG} reclen=400 \
-output file=${IN_FILE_1_SORT} \
reconst="0.12,1.17,2.4,3.3,4.6,5.12,6.2,7.10,8.12,9.12,10.12,11.8,12.1,13.8,14.8,15.8,16.1,17.8,18.8,19.2,20.8,21.8,22.8,23.8,24.8,25.2,26.8,27.8,28.1,29.5,30.1,31.2"
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

#
#--- 機器提供サービス契約スキーマ抽出ファイルからカレントレコードを抽出する。
#    <merge>
#     7:10asc:SVC_KEI_NO
bsortex -merge key=7.10asc -record recform=txtcsv -input file=${IN_FILE_1_SORT} reclen=350 \
-summary suppress last -output file=${TMP_FILE_1}
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " MERGE Error($SVC merge:rc=$rc) "
    echo $JOBNAME " SORT Error($SVC merge:rc=$rc) "
    exit ${G_RTN_ERROR}
fi

# DEF               (IN)
DEFFILE=${G_TOOLSH}/util/def/KK_CM_0561.def
# TMPDEF
TMPDEFFILE=${ULD_WORK_DIR}/KK_CM_0561.tmp.${JOBNAME}.def

# OUTPUT            (OUT)
OUTFILE=${MID_DIR_KK}/KKIFM442003.csv

#
#--- 環境変数の設定を行う（出力ファイル情報の設定）
#
export ZTLTMPDIR=${ULD_WORK_DIR}
export ZTLOUTFILE=${OUTFILE}

#
#--- 定義ファイル環境変数設定処理
#
cat ${DEFFILE} > ${TMPDEFFILE}
sed -i -e s@'${LOC_DIR_KK}'@${LOC_DIR_KK}@g ${TMPDEFFILE}

#
#--- ファイルマッチング処理
#
${G_TOOLSH}/util/bin/ZTLMAT01 ${TMPDEFFILE}
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " MATCHING UTIL Error($SVC util:rc=$rc) " 
    echo $JOBNAME " MATCHING UTIL Error($SVC util:rc=$rc) "
    exit ${G_RTN_ERROR}
fi


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

exit ${G_RTN_NORMAL}
