#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：料金管理
#
# シェル名      ：Ｑ＆Ａ社事業者間精算情報作成
#
# 機能          ：おうちの機器補償サービスが課金されている対象を抽出し、Ｑ＆Ａ社事業者間精算ファイルを作成する。
#
#
# コマンド形式  ：EO31O0110J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v39.00.00        2018/10/10 FJ)寺園     【ANK-3484-00-00】端末補償サービス導入対応
# v39.00.01        2018/10/10 FJ)寺園     【IT1-2018-0000179】端末補償サービス導入対応
# v39.00.02        2018/11/02 FJ)寺園     【IT2-2018-0000074】端末補償サービス導入対応
# v39.00.03        2018/11/19 FJ)寺園     【ST-2018-0000051】端末補償サービス導入対応
##############################################################

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

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

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

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

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

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

#
#--- システム日付取得(年月日時分秒)
#
. EOK010410J0.sh 2
#
#
#---業務で必要な変数定義
#
#--- マッチングツール定義ファイル
# マッチングツール定義ファイル(請求内訳（アンロードデータ）-サービス契約（アンロードデータ）)
MATCHDEFFILE1=${G_TOOLSH}/util/def/AC_CM_0153.def
# マッチングツール定義ファイル(Ｑ＆Ａ社事業者間精算情報（サービス契約）-業務パラメータ（アンロードデータ）-オプションサービス契約（アンロードデータ）)
MATCHDEFFILE2=${G_TOOLSH}/util/def/AC_CM_0154.def
# マッチングツール定義ファイル(Ｑ＆Ａ社事業者間精算情報（オプションサービス契約）-サブオプションサービス契約（アンロードデータ）)
MATCHDEFFILE3=${G_TOOLSH}/util/def/AC_CM_0155.def

#
#--- ファイル定義
#

#--- アンロードSQL定義ファイル
# 料金プランアンロードSQL定義ファイル
ULDSQL_KK0591=${SQL_DIR}/AC_U_KK0591_02.sql
# 請求内訳アンロードSQL定義ファイル
ULDSQL_CH0101=${SQL_DIR}/AC_U_CH0101_08.sql

# 入力ファイル
#　サービス契約共通アンロード（サービス開始前カレント）
KK0081_ULD=${MID_DIR_CC}/CCIFM018002.csv
#　オプションサービス契約共通アンロード（サービス開始前カレント）
KK0351_ULD=${MID_DIR_CC}/CCIFM008002.csv
#　サブオプションサービス契約共通アンロード（サービス開始前カレント）
KK0401_ULD=${MID_DIR_CC}/CCIFM010002.csv


# 一時ファイル
# 請求内訳アンロードSQL定義ワークファイル
ULDSQL_CH0101_WRK=${SQL_DIR}/${JOBNAME}_AC_U_CH0101_08.sql

#　請求内訳アンロード
CH0101_ULD=${MID_DIR_AC}/${JOBNAME}_CH0101_ULD.csv
# v39.00.03 ADD START
CH0101_ULD1=${MID_DIR_AC}/${JOBNAME}_CH0101_ULD1.csv
# v39.00.03 ADD END

#　料金プランアンロード
KK0591_ULD=${MID_DIR_AC}/${JOBNAME}_KK0591_ULD.csv

#Ｑ＆Ａ社事業者間精算情報（サービス契約）
OUTFILE_MATC1=${MID_DIR_AC}/${JOBNAME}_OUTFILE_MATC1.csv

#Ｑ＆Ａ社事業者間精算情報（オプションサービス契約）
OUTFILE_MATC2=${MID_DIR_AC}/${JOBNAME}_OUTFILE_MATC2.csv
OUTFILE_MATC2_SORT1=${MID_DIR_AC}/${JOBNAME}_OUTFILE_MATC2_SORT1.csv
OUTFILE_MATC2_SORT2=${MID_DIR_AC}/${JOBNAME}_OUTFILE_MATC2_SORT2.csv
OUTFILE_MATC2_SORT3=${MID_DIR_AC}/${JOBNAME}_OUTFILE_MATC2_SORT3.csv
OUTFILE_MATC2_SORT4=${MID_DIR_AC}/${JOBNAME}_OUTFILE_MATC2_SORT4.csv

#Ｑ＆Ａ社事業者間精算情報（サブオプションサービス契約）
OUTFILE_MATC3=${MID_DIR_AC}/${JOBNAME}_OUTFILE_MATC3.csv

#　オプションサービス契約共通アンロード（ソート）
KK0351_SORT=${MID_DIR_AC}/${JOBNAME}_KK0351_SORT.csv

#　サブオプションサービス契約共通アンロード（ソート）
KK0401_SORT=${MID_DIR_AC}/${JOBNAME}_KK0401_SORT.csv
# v39.00.02 ADD START
KK0401_SORT1=${MID_DIR_AC}/${JOBNAME}_KK0401_SORT1.csv
# v39.00.02 ADD END

#Ｑ＆Ａ社事業者間精算情報
OUTFILE1=${MID_DIR_AC}/${JOBNAME}_OUTFILE1.csv
OUTFILE2=${MID_DIR_AC}/${JOBNAME}_OUTFILE2.csv


# 出力ファイル
# Ｑ＆Ａ社事業者間精算情報
# Ｑ＆Ａ社事業者間精算情報 ファイル名
ACLST09301_YYYYMMDDhhmmss=${MID_DIR_AC}/ACLST09301_${RSLT_SYSDATE}.csv

#--- イベントコード
EVENT_CD="04"


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


#
#--- マッチング処理
#      p1：出力ファイルパス
#      p2：マッチングクエリファイルパス
EXEC_MATCHING()
{
    local _OUTFILE=$1
    local _MATCHING_FILE=$2

    # マッチングクエリファイルの存在チェック
    if [ ! -r ${_MATCHING_FILE} ]
    then
        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${_MATCHING_FILE}) "
        echo $JOBNAME " File is nonexist(${_MATCHING_FILE}) "
        exit ${G_RTN_ERROR}
    fi

    # 出力ファイルの初期化
    cat /dev/null > ${_OUTFILE}

    # マッチング実行
    export ZTLOUTFILE=${_OUTFILE}
    ${G_TOOLSH}/util/bin/ZTLMAT01 ${_MATCHING_FILE}
    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
}

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


#
# ファイルの存在チェック
if [ ! -r ${KK0081_ULD} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${KK0081_ULD}) "
    echo $JOBNAME " File is nonexist(${INFILE1}) "
    exit ${G_RTN_ERROR}
fi
if [ ! -r ${KK0351_ULD} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${KK0351_ULD}) "
    echo $JOBNAME " File is nonexist(${INFILE1}) "
    exit ${G_RTN_ERROR}
fi

#
# ファイルの存在チェック
if [ ! -r ${KK0401_ULD} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${KK0401_ULD}) "
    echo $JOBNAME " File is nonexist(${INFILE2}) "
    exit ${G_RTN_ERROR}
fi

#
#--- UNLOAD処理
#

#料金プランアンロード（AC_U_KK0591_02）
sh ${G_TOOLSH}/EOKULD02.sh ${ULDSQL_KK0591} ${KK0591_ULD}

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

#
#--- 請求年月取得
#
. EO3SEIKYYM.sh ${EVENT_CD} ${RSLT_OPEDATE} ${JOBNAME}

cp -f ${ULDSQL_CH0101} ${ULDSQL_CH0101_WRK}
sed -i -e "s/:SEIKY_YM/${SEIKY_YM}/"           ${ULDSQL_CH0101_WRK}
sed -i -e "s/:OPE_DATE/${RSLT_OPEDATE}/"       ${ULDSQL_CH0101_WRK}

#請求内訳アンロード（AC_U_CH0101_08）
# v39.00.03 MOD START
#sh ${G_TOOLSH}/EOKULD03.sh ${ULDSQL_CH0101_WRK} ${CH0101_ULD}
sh ${G_TOOLSH}/EOKULD03.sh ${ULDSQL_CH0101_WRK} ${CH0101_ULD1}
# v39.00.03 MOD END

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

#---ダブルクォート付与（すでにダブルクォートが付いている場合は何もしない）
#
# v39.00.03 MOD START
#nkf -d ${CH0101_ULD} |sed -e "s/^\"*/\"/" |sed -e "s/\"*$/\"/" |sed -e "s/,/\",\"/g" > ${CH0101_ULD}
nkf -d ${CH0101_ULD1} |sed -e "s/^\"*/\"/" |sed -e "s/\"*$/\"/" |sed -e "s/,/\",\"/g" > ${CH0101_ULD}
# v39.00.03 MOD END


#
# --- マッチング１
#
# 請求内訳アンロード、サービス契約アンロードをマッチング
#	0.10　請求契約番号
#	1.10　サービス契約番号
#	2. 4　オプションサービスコード
#	3. 3　サブオプションサービスコード
#	4.10　ＳＹＳＩＤ
#   5. 3　サービス契約ステータス
#   6. 8　サービス課金開始年月日
#   7. 8　サービス課金終了年月日
# 
export CH0101_ULD
export KK0081_ULD
EXEC_MATCHING ${OUTFILE_MATC1} ${MATCHDEFFILE1}

#
#--- オプションサービス契約共通アンロードファイルのソート
#　抽出条件
#	なし
#
#	4.10　サービス契約番号
#	3. 4　オプションサービスコード
#	0.12　オプションサービス契約番号
#	2. 3　オプションサービス契約ステータス
#  17. 3　料金コースコード
#  18. 6　料金プランコード
#  19. 8　サービス課金開始年月日
#  20. 8　サービス課金終了年月日
bsortex -sort key=4.10asc,3.4asc -record recform=txtcsv \
        -input file=${KK0351_ULD} reclen=${ULD_REC_LEN_KK0351} \
        -output file=${KK0351_SORT} \
        reconst="4.10,3.4,0.12,2.3,17.3,18.6,19.8,20.8"

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


#
# --- マッチング２
#
# Ｑ＆Ａ社事業者間精算情報（サービス契約）、オプションサービス契約アンロードをマッチング
#	0.12　オプションサービス契約番号
#	1. 4　オプションサービスコード
#	2. 3　サブオプションサービスコード
#	3.10　ＳＹＳＩＤ
#	4.10　サービス契約番号
#	5.10　請求契約番号
#   6. 3　料金コースコード
#   7. 6　料金プランコード
#   8.242 料金プラン名称
#   9. 3　オプションサービス契約ステータス
#  10. 8　サービス課金開始年月日（オプション）
#  11. 8　オプションサービス課金終了年月日（オプション）
#  12. 3　サービス契約ステータス
#  13. 8　サービス課金開始年月日
#  14. 8　サービス課金終了年月日
# 
export OUTFILE_MATC1
export KK0351_SORT
export KK0591_ULD
EXEC_MATCHING ${OUTFILE_MATC2} ${MATCHDEFFILE2}


#
#--- Ｑ＆Ａ社事業者間精算情報（オプションサービス契約）ファイルのソート
#　ソート順：サービス契約番号、オプションサービスコード、オプションサービス契約番号、サブオプションサービスコード
#	なし
#
#	0.12　オプションサービス契約番号
#	1. 4　オプションサービスコード
#	2. 3　サブオプションサービスコード
#	3.10　ＳＹＳＩＤ
#	4.10　サービス契約番号
#	5.10　請求契約番号
#   6. 3　料金コースコード
#   7. 6　料金プランコード
#   8.242 料金プラン名称
#   9. 3　オプションサービス契約ステータス
#  10. 8　サービス課金開始年月日（オプション）
#  11. 8　オプションサービス課金終了年月日（オプション）
#  12. 3　サービス契約ステータス
#  13. 8　サービス課金開始年月日
#  14. 8　サービス課金終了年月日
# v39.00.01 MOD START
#bsortex -sort key=0.12asc,2.3asc -record recform=txtcsv \
#        -input file=${OUTFILE_MATC2} reclen=400 \
#        -output file=${OUTFILE_MATC2_SORT1} 
bsortex -sort key=4.10asc,1.4asc,0.12asc,2.3asc -record recform=txtcsv \
        -input file=${OUTFILE_MATC2} reclen=400 \
        -output file=${OUTFILE_MATC2_SORT1} 
# v39.00.01 MOD END

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

#
#--- 同一オプションサービス契約が存在する場合はサブオプションサービスコードが設定されているものを残す
# v39.00.01 MOD START
#bsortex -merge key=0.12asc -record recform=txtcsv \
#        -input file=${OUTFILE_MATC2_SORT1} reclen=400 \
#        -summary suppress last \
#        -output file=${OUTFILE_MATC2_SORT2} 
bsortex -merge key=4.10asc,1.4asc -record recform=txtcsv \
        -input file=${OUTFILE_MATC2_SORT1} reclen=400 \
        -summary suppress last \
        -output file=${OUTFILE_MATC2_SORT2} 
# v39.00.01 MOD END

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

#
#--- Ｑ＆Ａ社事業者間精算情報（オプションサービス契約）ファイルのソートし、オプションサービス契約とサブオプションサービス契約に振り分ける。
#　抽出条件
#	なし
#
#	0.12　オプションサービス契約番号
#	1. 4　オプションサービスコード
#	2. 3　サブオプションサービスコード
#	3.10　ＳＹＳＩＤ
#	4.10　サービス契約番号
#	5.10　請求契約番号
#   6. 3　料金コースコード
#   7. 6　料金プランコード
#   8.242 料金プラン名称
#   9. 3　オプションサービス契約ステータス
#  10. 8　サービス課金開始年月日（オプション）
#  11. 8　オプションサービス課金終了年月日（オプション）
#  12. 3　サービス契約ステータス
#  13. 8　サービス課金開始年月日
#  14. 8　サービス課金終了年月日
bsortex -sort key=0.12asc,2.3asc -record recform=txtcsv \
        -input file=${OUTFILE_MATC2_SORT2} reclen=400 \
        -output file=${OUTFILE_MATC2_SORT3} case="2.3asc.lt.' '" \
        -output file=${OUTFILE_MATC2_SORT4} case="2.3asc.gt.' '" 

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


#
#--- サブオプションサービス契約共通アンロードファイルのソート
#　抽出条件
#	なし
#
#	0.12　オプションサービス契約番号
#	4. 3　サブオプションサービスコード
#	1.12　サブオプションサービス契約番号
#	3. 3　サブオプションサービス契約ステータス
#  10. 3　料金コースコード
#  11. 6　料金プランコード
#  12. 8　サービス課金開始年月日
#  13. 8　サービス課金終了年月日
# v39.00.02 MOD START
#bsortex -sort key=0.12asc,4.3asc -record recform=txtcsv \
#        -input file=${KK0401_ULD} reclen=${ULD_REC_LEN_KK0401} \
#        -output file=${KK0401_SORT} \
#        reconst="0.12,4.3,1.12,3.3,10.3,11.6,12.8,13.8"
bsortex -sort key=0.12asc,4.3asc,1.12asc -record recform=txtcsv \
        -input file=${KK0401_ULD} reclen=${ULD_REC_LEN_KK0401} \
        -output file=${KK0401_SORT1} \
        reconst="0.12,4.3,1.12,3.3,10.3,11.6,12.8,13.8"
# v39.00.02 MOD END

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

# v39.00.02 ADD START
#
#--- 同一オプションサービス契約が存在する場合は最新のものを残す
bsortex -merge key=0.12asc,1.3asc -record recform=txtcsv \
        -input file=${KK0401_SORT1} reclen=${ULD_REC_LEN_KK0401} \
        -summary suppress last \
        -output file=${KK0401_SORT} 

rc=$?
if [ $rc -ne 0 ]
then
    BSORT_ERROR ${rc} ${KK0401_SORT1}
fi
# v39.00.02 ADD END

#
# --- マッチング３
#
# Ｑ＆Ａ社事業者間精算情報（オプションサービス契約）、オプションサービス契約アンロードをマッチング
#	0.12　サブオプションサービス契約番号
#	1. 4　オプションサービスコード
#	2. 3　サブオプションサービスコード
#	3.10　ＳＹＳＩＤ
#	4.10　サービス契約番号
#	5.10　請求契約番号
#   6. 3　料金コースコード
#   7. 6　料金プランコード
#   8.242 料金プラン名称
#   9. 3　サブオプションサービス契約ステータス
#  10. 8　サービス課金開始年月日（サブオプション）
#  11. 8　オプションサービス課金終了年月日（サブオプション）
#  12. 3　サービス契約ステータス
#  13. 8　サービス課金開始年月日
#  14. 8　サービス課金終了年月日
# 
export OUTFILE_MATC2_SORT4
export KK0401_SORT
export KK0591_ULD
EXEC_MATCHING ${OUTFILE_MATC3} ${MATCHDEFFILE3}

#
#--- Ｑ＆Ａ社事業者間精算情報ファイルのマージ
cat ${OUTFILE_MATC2_SORT3} ${OUTFILE_MATC3} > ${OUTFILE1}

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

#
#--- Ｑ＆Ａ社事業者間精算情報ファイルのソート
#　抽出条件
#	なし
#
#	0.12　オプションサービス契約番号
#	1. 4　オプションサービスコード
#	2. 3　サブオプションサービスコード
#	3.10　ＳＹＳＩＤ
#	4.10　サービス契約番号
#	5.10　請求契約番号
#   6. 3　料金コースコード
#   7. 6　料金プランコード
#   8.242 料金プラン名称
#   9. 3　オプションサービス契約ステータス
#  10. 8　サービス課金開始年月日
#  11. 8　サービス課金終了年月日
#  12. 3　サービス契約ステータス
#  13. 8　サービス課金開始年月日
#  14. 8　サービス課金終了年月日
bsortex -sort key=4.10asc,0.12asc -record recform=txtcsv \
        -input file=${OUTFILE1} reclen=400 \
        -output file=${OUTFILE2} \
        reconst="0.12,3.10,4.10,5.10,7.6,8.242,9.3,10.8,11.8,12.3,13.8,14.8"

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


# Ｑ＆Ａ社事業者間精算情報 ファイルのヘッダ部を作成する
echo "\"ＯＰ契約番号\",\"ＳＹＳＩＤ\",\"お客さまＩＤ\",\"請求先番号\",\"プランコード\",\"プラン名称\",\"ＯＰ契約状態コード\",\"ＯＰ開始日\",\"ＯＰ解約日\",\"回線契約状態コード\",\"回線サービス開始日\",\"回線サービス終了日\"" > ${ACLST09301_YYYYMMDDhhmmss}


# Ｑ＆Ａ社事業者間精算情報ファイルを追記する
cat ${OUTFILE2} >> ${ACLST09301_YYYYMMDDhhmmss}

 nkf -Lw --overwrite ${ACLST09301_YYYYMMDDhhmmss}
 nkf -x -s --overwrite ${ACLST09301_YYYYMMDDhhmmss}


if [ $rc -eq 0 ]
then
#
#---ファイル削除を行う
#
rm -f ${ULDSQL_CH0101_WRK}
rm -f ${CH0101_ULD}
# v39.00.03 ADD START
rm -f ${CH0101_ULD1}
# v39.00.03 ADD END
rm -f ${KK0591_ULD}
rm -f ${OUTFILE_MATC1}
rm -f ${OUTFILE_MATC2}
rm -f ${OUTFILE_MATC2_SORT1}
rm -f ${OUTFILE_MATC2_SORT2}
rm -f ${OUTFILE_MATC2_SORT3}
rm -f ${OUTFILE_MATC2_SORT4}
rm -f ${OUTFILE_MATC3}
rm -f ${KK0351_SORT}
rm -f ${KK0401_SORT}
# v39.00.02 ADD START
rm -f ${KK0401_SORT1}
# v39.00.02 ADD END
rm -f ${OUTFILE1}
rm -f ${OUTFILE2}

fi

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

exit ${G_RTN_NORMAL}
