#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：契約管理
#
# シェル名      ：対象サービス契約抽出
#
# 機能          ：サービス契約を基点として、サービス開始年月日を確定するサービスに関するサービス契約より、サービス開始対象のサービス契約情報を抽出する。
#
#
# コマンド形式  ：EO2090110J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v8.00.01        2014/06/17  FJ)古内      TAI-2014-0000019（ＩＯ分散化）
# v10.00.00       2014/09/02  FJ)星野      IT2-2014-0000294
# v20.00.00       2015/11/27  FJ)土井       OM-2015-0003006 ソート削除対応
##############################################################

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

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

echo '運用日付------>'${RSLT_OPEDATE}

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

#
#--- アンロード関数
#       p1：テーブル名／クエリファイル名
EXEC_UNLOAD()
{
	# 出力ファイルの初期化
	cat /dev/null > $2
	rc=$?
	if [ $rc -ne 0 ]
	then
		sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File cat error($2:rc=$rc) "
		echo $JOBNAME " File cat error($2:rc=$rc) "
		exit ${G_RTN_ERROR}
	fi
	
	# unload(KK_T_CRECARD)
	sh ${G_TOOLSH}/EOKULD02.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
}

#
#--- クエリ編集
#       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}
	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
	cat /dev/null > ${OUTFILE}
	rc=$?
	if [ $rc -ne 0 ]
	then
		sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File cat error(${OUTFILE}:rc=$rc) "
		echo $JOBNAME " File cat error(${OUTFILE}:rc=$rc) "
		exit ${G_RTN_ERROR}
	fi

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

#
#--- 最小ファイルサイズ取得
#       1：最小ファイルサイズが0よりも大きい
#       0：最小ファイルサイズが0
#
GET_MIN_FILESIZE()
{

	MINSIZE=-1
	for bind in $1
	do
		filesize=`cat ${bind} | wc -l`
		
		if [ ${MINSIZE} -eq -1 ]
		then
			MINSIZE=${filesize}
		else
			if [ ${filesize} -lt ${MINSIZE} ]
			then
				MINSIZE=${filesize}
			fi
		fi
	done
	
	if [ ${MINSIZE} -gt 0 ]
	then
		return 1
	else
		return 0
	fi

}

#
# --- 各種変数の定義
#

# +++++++++++++++++++++ v8.00.01 mod start +++++++++++++++++++++
# 前ジョブからの引継ぎファイル
## EO2090105Jからの引継ぎファイル
#KK_U_KK0081_39_CUR_OTF=${MID_DIR_KK}/KK_U_KK0081_39_CUR.csv
#KK_U_KK0081_39_ALL_OTF=${MID_DIR_KK}/KK_U_KK0081_39_ALL.csv
## EO2090140Jからの引継ぎファイル
#KK_CM_0075_ULD=${MID_DIR_KK}/KK_CM_0075_KAISEN.csv
#KK_CM_0077_ULD=${MID_DIR_KK}/KK_CM_0077_KOJI.csv
# EO2090105Jからの引継ぎファイル
KK_U_KK0081_39_CUR_OTF=${LOC_DIR_KK}/KK_U_KK0081_39_CUR.csv
KK_U_KK0081_39_ALL_OTF=${LOC_DIR_KK}/KK_U_KK0081_39_ALL.csv
# EO2090140Jからの引継ぎファイル
KK_CM_0075_ULD=${LOC_DIR_KK}/KK_CM_0075_KAISEN.csv
KK_CM_0077_ULD=${LOC_DIR_KK}/KK_CM_0077_KOJI.csv
# +++++++++++++++++++++ v8.00.01 mod start +++++++++++++++++++++

# +++++++++++++++++++++ v8.00.01 mod start +++++++++++++++++++++
# 当ジョブでのワークファイル
#KK0081_CUR=${MID_DIR_KK}/${JOBNAME}.KK0081_CUR.csv
#KK0081_MIN=${MID_DIR_KK}/${JOBNAME}.KK0081_MIN.csv
#KK0081_KK0241_MTC=${MID_DIR_KK}/${JOBNAME}.KK0081_KK0241_MTC.csv
#KU0011_MTC=${MID_DIR_KK}/${JOBNAME}.KU0011_MTC.csv
#KK0081_KU0011_MTC=${MID_DIR_KK}/${JOBNAME}.KK0081_KU0011_MTC.csv
KK0081_CUR=${TMP_DIR_KK}/${JOBNAME}.KK0081_CUR.csv
KK0081_MIN=${TMP_DIR_KK}/${JOBNAME}.KK0081_MIN.csv
KK0081_KK0241_MTC=${TMP_DIR_KK}/${JOBNAME}.KK0081_KK0241_MTC.csv
KU0011_MTC=${TMP_DIR_KK}/${JOBNAME}.KU0011_MTC.csv
KK0081_KU0011_MTC=${TMP_DIR_KK}/${JOBNAME}.KK0081_KU0011_MTC.csv
# +++++++++++++++++++++ v8.00.01 mod end +++++++++++++++++++++
OUT_FILE=${MID_DIR_KK}/KKIFM421001.csv

# 出力ファイルの初期化
cat /dev/null > ${KK0081_MIN}
cat /dev/null > ${KK0081_KK0241_MTC}
cat /dev/null > ${KU0011_MTC}
cat /dev/null > ${KK0081_KU0011_MTC}
cat /dev/null > ${OUT_FILE}

# KK0081のカレントデータ取得
#  KK0081のカレント AND サービス契約ステータス = '030' AND 料金グループコード <> '10'
#  - SELECT(reconst)項目は以下
#      0 - 0.10   ：サービス契約番号
#      1 - 8.2    ：料金グループコード
#      2 - 12.8   ：サービス利用開始希望年月日
#      3 - 75.5   ：異動区分
#      4 - 5.12   ：申込明細番号
#      5 - 4.2    ：サービスコード
#      6 - 2.3    ：サービス契約ステータス
#      7 - 1.17   ：世代登録年月日時分秒
#      8 - 33.8   ：予約適用年月日
#      9 - 35.1   ：予約適用コード
#     10 - 96.1   ：無効フラグ
### OM-2015-0003006 2015/11/27 土井 MOD START
#bsortex -sort key="0.10asc" -record recform=txtcsv -input reclen=200 include="6.3asc.eq.'030'.and.1.2asc.ne.'10'" \
#  -output file=${KK0081_CUR} reconst="0.12,1.2,2.8,3.5,4.12,5.2,6.3,7.17,8.8,9.1,10.1" < ${KK_U_KK0081_39_CUR_OTF}
bsortex -copy -record recform=txtcsv -input reclen=200 include="6.3asc.eq.'030'.and.1.2asc.ne.'10'" \
  -output file=${KK0081_CUR} reconst="0.12,1.2,2.8,3.5,4.12,5.2,6.3,7.17,8.8,9.1,10.1" < ${KK_U_KK0081_39_CUR_OTF}
### OM-2015-0003006 2015/11/27 土井 MOD 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

# KK0081の申込時のデータ取得
#  KK0081の初期値 AND サービス契約ステータス = '030' AND 料金グループコード <> '10'
#  - SELECT(reconst)項目は以下
#      0 - 0.10   ：サービス契約番号
#      1 - 8.2    ：料金グループコード
#      2 - 12.8   ：サービス利用開始希望年月日
#      3 - 75.5   ：異動区分
#      4 - 5.12   ：申込明細番号
#      5 - 4.2    ：サービスコード
#      6 - 2.3    ：サービス契約ステータス
#      7 - 1.17   ：世代登録年月日時分秒
#      8 - 33.8   ：予約適用年月日
#      9 - 35.1   ：予約適用コード
#     10 - 96.1   ：無効フラグ
### OM-2015-0003006 2015/11/27 土井 MOD START
#bsortex -sort key="0.10asc,8.8asc,7.17asc" -record recform=txtcsv -input reclen=200 include="10.1asc.eq.'0'.and.9.1asc.eq.'2'.and.8.8asc.le.'${RSLT_OPEDATE}'" < ${KK_U_KK0081_39_ALL_OTF} \
#  | bsortex -merge key="0.10asc" -record recform=txtcsv -input reclen=200 -summary suppress first \
#  | bsortex -sort key="0.10asc" -record recform=txtcsv -input reclen=200 include="1.2asc.ne.'10'" -output file=${KK0081_MIN}
bsortex -sort key="0.10asc,8.8asc,7.17asc" -record recform=txtcsv -input reclen=200 include="10.1asc.eq.'0'.and.9.1asc.eq.'2'.and.8.8asc.le.'${RSLT_OPEDATE}'" < ${KK_U_KK0081_39_ALL_OTF} \
  | bsortex -merge key="0.10asc" -record recform=txtcsv -input reclen=200 -summary suppress first \
  | bsortex -copy -record recform=txtcsv -input reclen=200 include="1.2asc.ne.'10'" -output file=${KK0081_MIN}
### OM-2015-0003006 2015/11/27 土井 MOD 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

GET_MIN_FILESIZE "${KK0081_CUR}"
MIN_SIZE=$?

if [ ${MIN_SIZE} -gt 0 ]
then
	GET_MIN_FILESIZE "${KK_CM_0075_ULD}"
	MIN_SIZE=$?

	if [ ${MIN_SIZE} -gt 0 ]
	then

		# マッチング実行
		#  - SELECT(reconst)項目は以下
		#      0 - -.10   ：サービス契約番号
		#      1 - -.2    ：料金グループコード
		#      2 - -.8    ：サービス利用開始希望年月日
		#      3 - -.5    ：異動区分
		#      4 - -.12   ：申込明細番号
		#      5 - -.2    ：サービスコード
		#      6 - -.2    ：回線提供会社コード
		#      7 - -.8    ：電話VLAN-ID取込年月日
		#      8 - -.12   ：申込明細番号（サービス契約の申込時の申込明細番号）
		EDIT_MATCHING_QUERY ${G_TOOLSH}/util/def/KK_CM_0076.def "${KK0081_CUR} ${KK0081_MIN} ${KK_CM_0075_ULD}"
		EXEC_MATCHING ${KK0081_KK0241_MTC} ${MATCHING_QUERY_WORK}
		
		GET_MIN_FILESIZE "${KK_CM_0077_ULD}"
		MIN_SIZE=$?
		
		if [ ${MIN_SIZE} -gt 0 ]
		then
			
			MATCH_TMP_OUT_FILE=${MID_DIR_KK}/${JOBNAME}.MATCH_TMP.csv
			
			# マッチング実行
			#  - SELECT(reconst)項目は以下
			#      0 - -.10  ：サービス契約番号
			#      1 - -.2   ：料金グループコード
			#      2 - -.8   ：サービス利用開始希望年月日
			#      3 - -.5   ：異動区分
			#      4 - -.12  ：申込明細番号
			#      5 - -.2   ：サービスコード
			#      6 - -.2   ：回線提供会社コード
			#      7 - -.8   ：電話VLAN-ID取込年月日
			#      8 - -.3   ：工事案件種別コード
			#      9 - -.3   ：工事案件ステータス
			#     10 - -.8   ：工事案件実施年月日
			#     11 - -.3   ：マンション工事案件状態コード
			EDIT_MATCHING_QUERY ${G_TOOLSH}/util/def/KK_CM_0078.def "${KK0081_KK0241_MTC} ${KK_CM_0077_ULD}"
			EXEC_MATCHING ${MATCH_TMP_OUT_FILE} ${MATCHING_QUERY_WORK}

			# 工事案件ステータスが'900' または 工事案件ステータスが'120'かつマンション工事案件状態コードが'900'のレコードは対象外
			# +++++++++++++++++++++ v10.00.00 mod start +++++++++++++++++++++
			# レコード長を100⇒150に変更
			#bsortex -sort key="0.10asc" -record recform=txtcsv -input reclen=100 file=${MATCH_TMP_OUT_FILE} -output include="(9.3asc.ne.'900').and.(9.3asc.ne.'120'.or.11.3asc.ne.'900')" file=${KK0081_KU0011_MTC}
### OM-2015-0003006 2015/11/27 土井 MOD START
#			bsortex -sort key="0.10asc" -record recform=txtcsv -input reclen=150 file=${MATCH_TMP_OUT_FILE} -output include="(9.3asc.ne.'900').and.(9.3asc.ne.'120'.or.11.3asc.ne.'900')" file=${KK0081_KU0011_MTC}
			bsortex -copy -record recform=txtcsv -input reclen=150 file=${MATCH_TMP_OUT_FILE} -output include="(9.3asc.ne.'900').and.(9.3asc.ne.'120'.or.11.3asc.ne.'900')" file=${KK0081_KU0011_MTC}
### OM-2015-0003006 2015/11/27 土井 MOD END
			# +++++++++++++++++++++ v10.00.00 mod end +++++++++++++++++++++

			rm ${MATCH_TMP_OUT_FILE}

			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
			
			# ダブルクォーテーション削除
			sed -e 's/^"//g' -e 's/,"/,/g' -e 's/",/,/g' -e 's/"$//g' ${KK0081_KU0011_MTC} > ${OUT_FILE}
			
		else
			
			echo "■ダミー項目追加"
			
			# KK0081_KK0241_MTCはKKIFM421.defと項目数が異なるため、ダミー項目を追加
			#      0 - -.10   ：サービス契約番号
			#      1 - -.2    ：料金グループコード
			#      2 - -.8    ：サービス利用開始希望年月日
			#      3 - -.5    ：異動区分
			#      4 - -.12   ：申込明細番号
			#      5 - -.2    ：サービスコード
			#      6 - -.2    ：回線提供会社コード
			#      7 - -.8    ：電話VLAN-ID取込年月日
			#      8 - -.3   ：工事案件種別コード（ダミー）
			#      9 - -.3   ：工事案件ステータス（ダミー）
			#     10 - -.8   ：工事案件実施年月日（ダミー）
			#     11 - -.3   ：マンション工事案件状態コード（ダミー）
			# レコード末尾に４項目分のカンマを追加
			sed -e 's/$/,,,,/g' ${KK0081_KK0241_MTC} > ${KK0081_KU0011_MTC}
			
			# ダブルクォーテーション削除
			sed -e 's/^"//g' -e 's/,"/,/g' -e 's/",/,/g' -e 's/"$//g' ${KK0081_KU0011_MTC} > ${OUT_FILE}
			
		fi
	else
		
		echo "■内容転記２"
		
		# KK0081_CURはKKIFM421.defと項目数が同じであるため、内容を転記
		# ただし、料金グループコードがｅｏモバイル（Ｗｉ－Ｆｉ）、またはｅｏモバイル（メールアドレス）のみ
		#      0 - -.10  ：サービス契約番号
		#      1 - -.2   ：料金グループコード
		#      2 - -.8   ：サービス利用開始希望年月日
		#      3 - -.5   ：異動区分
		#      4 - -.12  ：申込明細番号
		#      5 - -.2   ：サービスコード
		#      6 - -.2   ：回線提供会社コード
		#      7 - -.8   ：電話VLAN-ID取込年月日
		#      8 - -.3   ：工事案件種別コード
		#      9 - -.3   ：工事案件ステータス
		#     10 - -.8   ：工事案件実施年月日
### OM-2015-0003006 2015/11/27 土井 MOD START
#		bsortex -sort key="0.10asc" -record recform=txtcsv -input reclen=150 file=${KK0081_CUR} -output include="1.2asc.eq.'07'.or.1.2asc.eq.'16'" file=${KK0081_KU0011_MTC}
		bsortex -copy -record recform=txtcsv -input reclen=150 file=${KK0081_CUR} -output include="1.2asc.eq.'07'.or.1.2asc.eq.'16'" file=${KK0081_KU0011_MTC}
### OM-2015-0003006 2015/11/27 土井 MOD END
		
		# ダブルクォーテーション削除
		sed -e 's/^"//g' -e 's/,"/,/g' -e 's/",/,/g' -e 's/"$//g' ${KK0081_KU0011_MTC} > ${OUT_FILE}
		
	fi
fi

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

P1="OPD=$OPD,"
P2="SVCCTL=JBSbatMultiServiceControl,"
P3="JOB=EO2090110J0,"
P4="IND1=KKIFM421.def,"
P5="INF1=${OUT_FILE},"
P6="IND2=,"
P7="INF2=,"
P8="OTD1=KKIFM049.def,"
P9="OTF1=${MID_DIR_KK}/KKIFM049001.csv,"
P10="OTD2=,"
P11="OTF2=,"
P12="TABLENAME=,"
P13="SQLKEY=,"
P14="SQLPARAM=,"
P15="ERRFILE=,"
P16="RECOVERY=,"
P17="BREAKPTN=,"
P18="FREE=${MID_DIR_KK}/"
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
fi

exit_rc=$rc

# 各種一時ファイルの削除
rm -f ${KK0081_CUR}
rm -f ${KK0081_MIN}
rm -f ${KK0081_KK0241_MTC}
rm -f ${KU0011_MTC}
rm -f ${KK0081_KU0011_MTC}

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

exit $exit_rc
