#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：契約管理
#
# シェル名      ：初回請求年月更新（請求年月）
#
# 機能          ：初回請求年月が未設定の請求契約に対し、初回請求年月の登録を行う。
#初回請求年月の登録を行った請求契約に紐付く請求オプションサービス契約に対し、サービス課金開始年月日の登録を行う。
#
# コマンド形式  ：EO2DH0110J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v9.00.00       2014/09/05   FJ)高田     ST4-2014-0000050
# v24.00.00      2015/09/30   FJ)柿坂     ANK-2691-00-00
#
##############################################################

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

# **** デバッグ（実行時間取得用）**** 

#
#---ツール格納場所
#
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

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

#
#--- アンロード関数
#       p1：テーブル名／クエリファイル名
#       p2：出力ファイル名
#
EXEC_UNLOAD()
{
	# 出力ファイルの初期化
	cat /dev/null > $2
	
	rc=$?
	PRC_ERR $rc " File cat error($2:rc=$rc) "
	
	# unload(KK_T_CRECARD)
	sh ${G_TOOLSH}/EOKULD02.sh $1 $2
	
	rc=$?
	PRC_ERR $rc " unload error($2:rc=$rc) "
}

#
#--- クエリ編集
#       p1：ＳＱＬ定義ファイル名
#       p2：バインド変数置換文字
#
EDIT_ULD_QUERY()
{
	SQL_FILE=$1
	SQL_WORK_FILE=${ULD_WORK_DIR}/${JOBNAME}_QUERY.tmp
	cat /dev/null > ${SQL_WORK_FILE}
	
	# SQL定義ファイルの編集
	if [ ! -r ${SQL_FILE} ]
	then
		sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${SQL_FILE}:rc=$rc) "
		echo $JOBNAME " File is nonexist(${SQL_FILE}:rc=$rc) "
		exit ${G_RTN_ERROR}
	fi

	# バインド変数を置き換える
	cat ${SQL_FILE} > ${SQL_WORK_FILE}
	
	for bind in $2
	do
		#sed -i, -e 0,/?/s/?/"'"$bind"'"/ ${SQL_WORK_FILE}
		sed -i, -e /?/s/?/"'"$bind"'"/ ${SQL_WORK_FILE}
	done
	
	export SQL_WORK_FILE
}

#
#--- クエリ編集
#       p1：ＳＱＬ定義ファイル名
#       p2：バインド変数置換文字
#
EDIT_MATCHING_QUERY()
{
	
	MATCHING_FILE=$1
	MATCHING_QUERY_WORK=${ULD_WORK_DIR}/${JOBNAME}_MATCH_QUERY.tmp
	cat /dev/null > ${MATCHING_QUERY_WORK}
	
	# SQL定義ファイルの編集
	if [ ! -r ${MATCHING_FILE} ]
	then
		sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${MATCHING_FILE}:rc=$rc) "
		echo $JOBNAME " File is nonexist(${MATCHING_FILE}:rc=$rc) "
		exit ${G_RTN_ERROR}
	fi

	# バインド変数を置き換える
	cat ${MATCHING_FILE} > ${MATCHING_QUERY_WORK}
	
	for bind in $2
	do
		bind_escape=`echo $bind | sed "s/\//\\\\\\\\\//g"`
		sed -i, -e 0,/#FILE#/s/#FILE#/$bind_escape/ ${MATCHING_QUERY_WORK}
	done
	
	export MATCHING_QUERY_WORK
}

#
#--- マッチング処理
#      p1：出力ファイルパス
#      p2：マッチングクエリファイルパス
#
EXEC_MATCHING()
{
	# 出力ファイルの初期化
	OUTFILE=$1
	QUERY_FILE=$2
	
	cat /dev/null > ${OUTFILE}
	
	rc=$?
	PRC_ERR $rc " File cat error(${OUTFILE}:rc=$rc) "

	# マッチング実行
	export ZTLOUTFILE=${OUTFILE}
	${G_TOOLSH}/util/bin/ZTLMAT01 ${QUERY_FILE}
	
	rc=$?
	PRC_ERR $rc "matching error(${QUERY_FILE}:rc=$rc)"
}

#
#-- エラー処理
#
PRC_ERR()
{
	ERR_CD=$1
	ERR_MSG=$2
	
	if [ $ERR_CD -ne 0 ]
	then
		sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME ${ERR_MSG}
		echo $JOBNAME ${ERR_MSG}
		exit ${G_RTN_ERROR}
	fi
}

#
# -- 各一時ファイルの定義
#
ULD_OTF=${MID_DIR_KK}/${JOBNAME}.ULD_TMP.csv
KK0491_OTF=${MID_DIR_KK}/${JOBNAME}.KK0491.csv
#KK0491_C_OTF=${MID_DIR_KK}/${JOBNAME}.KK0491_C.csv
#KK0491_R_OTF=${MID_DIR_KK}/${JOBNAME}.KK0491_R.csv
KK0081_C_OTF=${MID_DIR_KK}/${JOBNAME}.KK0081_C.csv
KK0441_C_OTF=${MID_DIR_KK}/${JOBNAME}.KK0441_C.csv
MATCH_OTF=${MID_DIR_KK}/KKIFM074001.csv

#*******************************************************************************************
#  初回請求年月更新対象の特定処理（アンロード・マッチング）
#*******************************************************************************************

#
#--- KK0491(KK_T_SEIKY_KEI)データの編集
#      0 - 0.10 ：請求契約番号
#      1 - 1.17 ：世代登録年月日時分秒
#      2 - 2.1  ：請求方法コード
#      3 - 3.12 ：請求方法番号(クレジットカード)
#      4 - 4.11 ：送付先電話番号
#      5 - 5.8  ：予約適用年月日
#      6 - 6.1  ：予約適用コード
#      7 - 7.6  ：初回請求年月
#      8 - 8.1  ：無効フラグ
#
## KK0491(KK_T_SEIKY_KEI)の全データをアンロード
##EXEC_UNLOAD ${SQL_DIR}/KK_U_KK0491_05.sql ${ULD_OTF}

# KK0491(KK_T_SEIKY_KEI)のカレントと予約データを取得
EDIT_ULD_QUERY ${SQL_DIR}/KK_U_KK0491_05.sql "${RSLT_OPEDATE}"
EXEC_UNLOAD ${SQL_WORK_FILE} ${KK0491_OTF}

# **** KK0491のカレントデータ取得 **** 
#bsortex -sort key="0.10asc,5.8asc,1.17asc" -record recform=txtcsv -input reclen=100 include="8.1asc.eq.'0'.and.6.1asc.eq.'2'.and.5.8asc.le.'${RSLT_OPEDATE}'" < ${ULD_OTF} \
#  | bsortex -merge key="0.10asc" -record recform=txtcsv -input reclen=100 -summary suppress last -output file=${KK0491_C_OTF}

#rc=$?
#PRC_ERR $rc " SORT Error($KK0491_C_OTF sort:rc=$rc) "

# **** KK0491の予約データ取得 ****
#bsortex -sort key="0.10asc,5.8asc,1.17asc" -record recform=txtcsv -input reclen=100 include="8.1asc.eq.'0'.and.6.1asc.eq.'2'.and.5.8asc.gt.'${RSLT_OPEDATE}'" -output file=${KK0491_R_OTF} < ${ULD_OTF}

#rc=$?
#PRC_ERR $rc " SORT Error($KK0491_OTF sort:rc=$rc) "

# **** KK0491のカレントと予約データのマージ **** 
#bsortex -sort key="0.10asc,1.17asc" -record recform=txtcsv -input reclen=100 file=${KK0491_C_OTF},${KK0491_R_OTF} -output file=${KK0491_OTF}

#rc=$?
#PRC_ERR $rc " SORT Error($KK0491_R_OTF sort:rc=$rc) "

#
#--- KK0081(KK_T_SVC_KEI)データの編集
#  - SELECT(reconst)項目は以下
#      0 - 0.10 ：サービス契約番号
#      1 - 1.17 ：世代登録年月日時分秒
#      2 - 2.3  ：サービス契約ステータス
#      3 - 3.2  ：料金グループコード
#      4 - 4.8  ：予約適用年月日
#      5 - 5.1  ：予約適用コード
#      6 - 6.1  ：無効フラグ
#      7 - 7.10 ：請求契約番号
#      8 - 8.8  ：課金先適用開始年月日
#      9 - 9.8  ：課金先適用終了年月日
#
# KK0081(KK_T_SVC_KEI)の全データをアンロード
EDIT_ULD_QUERY ${SQL_DIR}/KK_U_KK0081_24.sql "${RSLT_OPEDATE}"
EXEC_UNLOAD ${SQL_WORK_FILE} ${ULD_OTF}

# **** KK0081のカレントデータ取得 **** 
bsortex -sort key="0.10asc,4.8asc,1.17asc" -record recform=txtcsv -input reclen=100 include="6.1asc.eq.'0'.and.5.1asc.eq.'2'.and.4.8asc.le.'${RSLT_OPEDATE}'" < ${ULD_OTF} \
  | bsortex -merge key="0.10asc" -record recform=txtcsv -input reclen=100 -summary suppress last -output file=${KK0081_C_OTF}

rc=$?
PRC_ERR $rc " SORT Error($KK0081_C_OTF sort:rc=$rc) "

# ++++++++++++++ v24.00.00 MOD STA ++++++++++++++
##
##--- KK0441(KK_T_SEIOPSVC_KEI)データの編集
##  - SELECT(reconst)項目は以下
##      0 - 0.12 ：請求オプションサービス契約番号
##      1 - 1.17 ：世代登録年月日時分秒
##      2 - 2.10 ：請求契約番号
##      3 - 3.8  ：予約適用年月日
##      4 - 4.1  ：予約適用コード
##      5 - 5.1  ：無効フラグ
##      6 - 6.4  ：請求オプションサービスコード
##
## KK0441(KK_T_SEIOPSVC_KEI)の全データをアンロード
#EXEC_UNLOAD ${SQL_DIR}/KK_U_KK0441_02.sql ${ULD_OTF}
#
## **** KK0441のカレントデータ取得 **** 
#bsortex -sort key="2.10asc,3.8asc,1.17asc" -record recform=txtcsv -input reclen=100 include="5.1asc.eq.'0',6.4asc.eq.'E001'" < ${ULD_OTF} \
#  | bsortex -merge key="2.10asc" -record recform=txtcsv -input reclen=100 -summary suppress last -output file=${KK0441_C_OTF}
cat /dev/null > ${KK0441_C_OTF}
# ++++++++++++++ v24.00.00 MOD END ++++++++++++++

rc=$?
PRC_ERR $rc " SORT Error($KK0441_C_OTF sort:rc=$rc) "

# マッチングファイルの初期化
cat /dev/null > ${MATCH_OTF}

# (前回作成済)ファイルの初期化
cat /dev/null > ${MID_DIR_KK}/KKIFM074002.csv

# 入力ファイルの件数取得
REC_NUM=`cat ${SEND_DIR}/KKIFI032001.csv | wc -l`

if [ ${REC_NUM} -ne 0 ]
then
	# 入力ファイルをダブルクォーテーション付のCSVに変換する。
	cat ${SEND_DIR}/KKIFI032001.csv | sed -e 's/\([0-9]*\),\([0-9]*\)/"\1","\2"/g' > ${MID_DIR_KK}/KKIFI032001.csv
	
	# マッチング
	EDIT_MATCHING_QUERY ${G_TOOLSH}/util/def/KK_CM_0030.def "${KK0491_OTF} ${MID_DIR_KK}/KKIFI032001.csv ${KK0081_C_OTF} ${KK0441_C_OTF}"
	EXEC_MATCHING ${MATCH_OTF} ${MATCHING_QUERY_WORK}
	
	cat ${MATCH_OTF} | sed -e 's/"//g' > ${MID_DIR_KK}/KKIFM074002.csv
fi

#
#-- 一時ファイルの削除
#
rm ${ULD_OTF}
rm ${KK0491_OTF}
#rm ${KK0491_C_OTF}
#rm ${KK0491_R_OTF}
rm ${KK0081_C_OTF}
rm ${KK0441_C_OTF}

#*******************************************************************************************
#  初回請求年月の更新処理（Javaプログラム呼出）
#*******************************************************************************************

#LOADER用データファイル
INS_PRG_FILE=${MID_DIR_KK}/${JOBNAME}.INS_PRG.csv

#
#---パラメタ定義
#
P1="OPD=$RSLT_OPEDATE,"
P2="SVCCTL=JBSbatMultiServiceControl,"
P3="JOB=EO2DH0110J0,"
P4="IND1=KKIFM074.def,"
P5="INF1=${MID_DIR_KK}/KKIFM074002.csv,"
P6="IND2=,"
P7="INF2=,"
P8="OTD1=,"
P9="OTF1=,"
P10="OTD2=,"
P11="OTF2=,"
P12="TABLENAME=,"
P13="SQLKEY=,"
P14="SQLPARAM=,"
P15="ERRFILE=,"
P16="RECOVERY=,"
P17="BREAKPTN=,"
P18="FREE=${INS_PRG_FILE}"
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
else

	# ロード処理（進捗）
	. EOK010410J0.sh 1
	SYSDATE=`echo $RSLT_SYSDATE`

	LOAD_TRN_ID="$HOSTNAME"_"$JOBNAME"_"$$"
	LOAD_FILE_KK_T_PRG=${MID_DIR_CK}/KK_T_PRG_01.ctl
	LOAD_WORK_FILE_KK_T_PRG=${MID_DIR_CK}/KK_T_PRG_01_WK.ctl
	LOADER_CTL_KK_T_PRG=${SQL_LOADER_CTL_DIR}/KK_T_PRG_01.ctl

	LOG_FILE=${SQL_LOADER_LOG_DIR}/KK_T_PRG_01_${SYSDATE}.log
	BAD_FILE=${SQL_LOADER_BAD_DIR}/KK_T_PRG_01_${SYSDATE}.bad

	# 運用日付取得
	OPEDATE=`echo $RSLT_OPEDATE`

	# 変数を書き換える
	sed -e "s/:TRN_ID/${LOAD_TRN_ID}/g" ${LOADER_CTL_KK_T_PRG} > ${LOAD_WORK_FILE_KK_T_PRG}
	sed -e "s/:UNYO_YMD/${OPEDATE}/g" ${LOAD_WORK_FILE_KK_T_PRG} > ${LOAD_FILE_KK_T_PRG}

	# ロード
	sqlldr ${ORACLEUSER}/${ORACLEPASS}@${SID_S},CONTROL=${LOAD_FILE_KK_T_PRG},DATA=${INS_PRG_FILE},LOG=${LOG_FILE},BAD=${BAD_FILE}

	rc=$?
	if [ $rc -ne 0 ]
	then
	    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " PROGRAM Error($SVC program:rc=$rc) "
	    echo $JOBNAME " PROGRAM Error($SVC program:rc=$rc) "
	    if [ $rc -ne 8 ]
	    then
	        sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " LOAD Error($SVC load:rc=$rc) ログを確認してください。ログファイル：${LOG_FILE}、不良ファイル：${BAD_FILE} "
	        echo $JOBNAME " LOAD Error($SVC load:rc=$rc) "
	        if [ $rc -ne 127 ]
	        then
	            exit ${G_RTN_ERROR}
	        fi
	    fi
	fi

	# ワークファイル削除
	rm ${LOAD_FILE_KK_T_PRG}
	rm ${LOAD_WORK_FILE_KK_T_PRG}

fi

exit_rc=$rc

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

exit $exit_rc
