#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：契約管理
#
# シェル名      ：ブロッキング通知メール送信情報作成
#
# 機能          ：メールプラットフォーム向けブロッキング情報通知メールをファイル出力する。
#１． ブロッキング情報からブロッキング情報通知メール情報を作成する
#２． ブロッキング情報通知メール情報の件数をブロッキング情報通知メール件数に出力する
#３． ブロッキング情報通知メールフラグを作成する
#
# コマンド形式  ：EO2HQ0110J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v49.00.00      2020/03/26   FJ)中原     【ANK-3834-00-00】マルウェアブロッキング
# v54.00.00      2021/06/29   FJ)平野     【ANK-4043-00-00】マルウェアブロッキング送信方法の変更 
#
##############################################################
# 環境変数定義
##############################################################

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

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

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

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

#
#---OPD
#
OPD=$1

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

#---システム日付(RSLT_SYSDATE)をyyyyMMddHHmmss形式で取得
. EOK010410J0.sh 2

#
#---業務で必要な変数定義
#
########### ANK-4043-00-00 ADD START

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

#
#--- マッチング処理
#      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
}

#
#--- bsortexコマンド実行時のエラー処理
#      p1：bsortexコマンドの終了コード
#      p2：bsortexコマンドの入力ファイル
#
BSORT_ERROR()
{
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " BSORTEX error(input file=$2:rc=$1) "
    echo $JOBNAME " BSORTEX error(input file=$2:rc=$1) "
    exit ${G_RTN_ERROR}
}

#
#--- クエリ編集
#       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
}

###--------------------------------------------------
## ファイル

# マッチングツール定義ファイル
MATCHDEF_KK3221=${G_TOOLSH}/util/def/KK_CM_1037.def

# ブロッキング情報　アンロードＳＱＬファイル
ULD_SQL_KK3221=${SQL_DIR}/KK_U_KK3221_01.sql
# サービス契約内訳<eo光ネット>　アンロードＳＱＬファイル
ULD_SQL_KK0171=${SQL_DIR}/KK_U_KK0171_01.sql
# 業務パラメータ管理　アンロードＳＱＬファイル
ULD_SQL_ZM0321=${SQL_DIR}/KK_U_ZM0321_06.sql

# 共有アンロードファイル定義

# サービス契約内訳（カレント）
COMULD2_KK0161_CUR=${MID_DIR_CC}/CCIFM021002.csv;export COMULD2_KK0161_CUR
# オプションサービス契約（カレント）
COMULD2_KK0351_CUR=${MID_DIR_CC}/CCIFM026002.csv;export COMULD2_KK0351_CUR
# オプションサービス契約<ISP>（全件）
COMULD2_KK0361_ALL=${MID_DIR_CC}/CCIFM027001.csv;export COMULD2_KK0361_ALL

# シェル内利用ファイル定義

# ブロッキング情報（アンロード）
KKIFM922_KK3221=${MID_DIR_KK}/KKIFM922_KK3221.csv
# サービス契約内訳<eo光ネット>（アンロード）
KKIFM922_KK0171=${MID_DIR_KK}/KKIFM922_KK0171.csv
# オプションサービス契約（共通アンロードから抽出）
KKIFM922_KK0351=${MID_DIR_KK}/KKIFM922_KK0351.csv
# マッチング結果中間ファイル
KKIFM922_TEMP=${MID_DIR_KK}/KKIFM922_TEMP.csv
# 結果ファイル
KKIFM922_OUTPUT=${MID_DIR_KK}/KKIFM922_OUTPUT.csv
# 業務パラメータ管理(アンロード)
KKIFM922_ZM0321=${MID_DIR_KK}/KKIFM922_ZM0321.csv
# 業務パラメータ管理(アンロード)
KKIFM922_ZM0321_DAY=${MID_DIR_KK}/KKIFM922_ZM0321_1.csv
#--分割ファイル
MAIL_TXT1=${MID_DIR_KK}/MAILBLK_DAT_01.csv
MAIL_TXT2=${MID_DIR_KK}/MAILBLK_DAT_02.csv
MAIL_TXT3=${MID_DIR_KK}/MAILBLK_DAT_03.csv
MAIL_TXT4=${MID_DIR_KK}/MAILBLK_DAT_04.csv
MAIL_TXT5=${MID_DIR_KK}/MAILBLK_DAT_05.csv
MAIL_TXT6=${MID_DIR_KK}/MAILBLK_DAT_06.csv
MAIL_TXT7=${MID_DIR_KK}/MAILBLK_DAT_07.csv
## ----------------------------------------------------------------
# 前処理
#  1.運用日前月の月初／月末を取得
#  2.オプションサービス契約から有効なメールアドレスのオプションを絞り込む

# 当月の年月を取得
YYYYMM=`echo ${RSLT_OPEDATE} | cut -b 1-6`
# 前月の月初を取得（当月１日の前月）
YYYYMM_B_F=`date -d "${YYYYMM}01 1 months ago" +%Y%m%d`
# 前月の月末を取得（当月１日の前日）
YYYYMM_B_E=`date -d "${YYYYMM}01 1 days ago" +%Y%m%d`

#
# オプションサービス契約から有効なメールアドレスのオプションを絞り込む
# 取得項目：オプションサービス契約番号、世代登録年月日、オプションサービス契約ステータス、オプションサービスコード
#
BSORT_DEF_KK0351_CUR="@OP_SVC_KEI_NO=0.12 @GENE_ADD_DTM=1.17 @OP_SVC_KEI_STAT=2.3 @OP_SVC_CD=3.4 @SVC_KEI_NO=7.10"
bsortex -define ${BSORT_DEF_KK0351_CUR} -copy -record recform=txtcsv \
        -input file=${COMULD2_KK0351_CUR} \
               reclen=${ULD2_REC_LEN_KK0351} \
               reconst="@OP_SVC_KEI_NO,@GENE_ADD_DTM,@OP_SVC_KEI_STAT,@OP_SVC_CD,@SVC_KEI_NO" \
               include="(@OP_SVC_KEI_STATasc.eq.'100'.or.@OP_SVC_KEI_STATasc.eq.'210'.or.@OP_SVC_KEI_STATasc.eq.'220').and.(@OP_SVC_CDasc.eq.'B001')" \
        -output file=${KKIFM922_KK0351}
rc=$?
if [ $rc -ne 0 ]
then
    BSORT_ERROR ${rc} ${COMULD2_KK0351_CUR}
fi

## ----------------------------------------------------------------
# アンロード処理

# ブロッキング情報のアンロード
EDIT_ULD_QUERY ${ULD_SQL_KK3221} "${YYYYMM_B_F} ${YYYYMM_B_E}"
UNLOAD ${SQL_WORK_FILE} ${KKIFM922_KK3221}

# サービス契約内訳<eo光ネット>
UNLOAD ${ULD_SQL_KK0171} ${KKIFM922_KK0171}

## ----------------------------------------------------------------
# マッチング処理

export KKIFM922_KK3221
export KKIFM922_KK0171
export KKIFM922_KK0351

EXEC_MATCHING ${KKIFM922_TEMP} ${MATCHDEF_KK3221}

## ----------------------------------------------------------------
# ソート
# ファイルが0バイト以上の場合、ソートを行う。ソートキーはサービス契約番号

cat /dev/null > ${KKIFM922_OUTPUT}
if [ -s ${KKIFM922_TEMP} ] 
then
    BSORT_DEF_OUTPUT="@NISHO_ID=0.64 @SVC_KEI_NO=3.10 @MLAD=6.256"
    bsortex -define ${BSORT_DEF_OUTPUT} -sort key="@SVC_KEI_NOasc,@MLADasc" \
            -record recform=txtcsv \
            -input file=${KKIFM922_TEMP} \
                   reclen=170 \
            -output reconst="@SVC_KEI_NO,@MLAD" \
                    file=${KKIFM922_OUTPUT}
    rc=$?
    if [ $rc -ne 0 ]
    then
        BSORT_ERROR ${rc} ${KKIFM922_TEMP}
    fi
fi

# 業務パラメータ管理を取得しブロッキング通知メール送信上限数(全数)を取得
# 業務パラメータID
# 前処理
WORK_PARAM_ID="KK_BLOCKINGM_MAX_CNT"

# UNLOAD処理
EDIT_ULD_QUERY ${ULD_SQL_ZM0321} "${WORK_PARAM_ID}"
UNLOAD ${SQL_WORK_FILE} ${KKIFM922_ZM0321}

# 業務パラメータ設定を取得
sed -i -e s@'"'@''@g ${KKIFM922_ZM0321}
KK_BLOCKINGM_MAX_CNT=`cat ${KKIFM922_ZM0321}`

# SQLの出力結果を集計
RSLT_CNT=`wc -l ${KKIFM922_OUTPUT} | awk '{printf $1}'`
# ブロッキング通知メール送信上限数(全数)よりSQLの出力結果が多ければマイナーエラーを出力し処理終了。

if [ ${RSLT_CNT} -gt ${KK_BLOCKINGM_MAX_CNT} ]
then
   rm -rf ${KKIFM922_KK3221}
   rm -rf ${KKIFM922_KK0171}
   rm -rf ${KKIFM922_KK0351}
   rm -rf ${KKIFM922_TEMP}
   rm -rf ${KKIFM922_ZM0321}
   sh ${G_TOOLSH}/EOK010210J0.sh CS00003W $JOBNAME "件数超過(${RSLT_CNT})" 
   exit ${G_RTN_WARN}
fi
########### ANK-4043-00-00 ADD END

#
#---出力ファイル
#
KKIFE398_TXT=${GAIBU_SEND_DIR_KK}/KKIFE398/MAILBLKFIM_DAT_${RSLT_SYSDATE}.csv
########### ANK-4043-00-00 DEL START
#KKIFE398_CNT=${GAIBU_SEND_DIR_KK}/KKIFE398/MAILBLKFIM_CNT_${RSLT_SYSDATE}.csv
#KKIFE398_FLG=${GAIBU_SEND_DIR_KK}/KKIFE398/FTP_MAILBLKFIM_${RSLT_SYSDATE}.flg
########### ANK-4043-00-00 DEL END
##############################################################
# 業務処理
##############################################################
sh ${G_TOOLSH}/EOK010210J0.sh CS00025I $JOBNAME

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

P1="OPD=$RSLT_OPEDATE,"
P2="SVCCTL=JBSbatUnitServiceControl,"
P3="JOB=EO2HQ0110J0,"
P4="IND1=,"
P5="INF1=,"
P6="IND2=,"
P7="INF2=,"
P8="OTD1=,"
P9="OTF1=,"
P10="OTD2=,"
P11="OTF2=,"
P12="TABLENAME=,"
P13="SQLKEY=,"
P14="SQLPARAM=,"
P15="ERRFILE=,"
P16="RECOVERY=,"
P17="BREAKPTN=,"
########### ANK-4043-00-00 MOD START
#P18="FREE=${KKIFE398_TXT}"
P18="FREE=${KKIFE398_TXT};${KKIFM922_OUTPUT};KKIFM922.def"
########### ANK-4043-00-00 MOD ND
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

if [ $rc -eq 0 ]
then
########### ANK-4043-00-00 ADD START
# 業務パラメータ管理を取得しブロッキング通知メール送信上限数(一日)を取得
# 業務パラメータID
# 前処理
    WORK_PARAM_ID_DAY="KK_BLOCKINGM_DAY_CNT"
# UNLOAD処理
	EDIT_ULD_QUERY ${ULD_SQL_ZM0321} "${WORK_PARAM_ID_DAY}"
	UNLOAD ${SQL_WORK_FILE} ${KKIFM922_ZM0321_DAY}

# 業務パラメータ設定を取得
	sed -i -e s@'"'@''@g ${KKIFM922_ZM0321_DAY}
	KK_BLOCKINGM_DAY_CNT=`cat ${KKIFM922_ZM0321_DAY}`
	
	split ${KKIFE398_TXT} -l ${KK_BLOCKINGM_DAY_CNT} -d  ${MID_DIR_KK}/MAILBLK_DAT_
	
	rc=$?
	if [ $rc -ne 0 ]
	then
	    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " split Error($SVC split:rc=$rc) "
	    echo $JOBNAME " split Error($SVC split:rc=$rc) "
	    exit ${G_RTN_ERROR}
	fi
	csvfile=`find ${MID_DIR_KK}/ -name MAILBLK_DAT_*`
	for csvfilename in ${csvfile}
    do
      mv ${csvfilename} ${csvfilename}.csv
    done
# 件数ファイルの作成
	file=`find ${MID_DIR_KK}/ -name MAILBLK_DAT_*`
    for filename in ${file}
    do
      txtfilenum=`echo ${filename##*/} | cut -c 13-14`
      if [ ! -s ${filename} ]
      then
          rm -f ${filename}
      else
########### ANK-4043-00-00 ADD END
########### ANK-4043-00-00 MOD START
    	  #
    	  #--- 件数ファイルの作成
    	  #
#         wc -l ${KKIFE398_TXT} | awk '{printf "\"%05d\"\n",$1}' > ${KKIFE398_CNT}
          wc -l ${filename} | awk '{printf "\"%05d\"\n",$1}' >${MID_DIR_KK}/MAILBLK_CNT_${txtfilenum}.csv
########### ANK-4043-00-00 MOD END         
    
	      rc=$?
          if [ $rc -ne 0 ]
          then
########### ANK-4043-00-00 MOD START
#              sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " Count error($KKIFE398_TXT:rc=$rc) "
              sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " Count error($filename:rc=$rc) "
########### ANK-4043-00-00 MOD END
########### ANK-4043-00-00 MOD START
#              echo $JOBNAME " Count error($KKIFE398_TXT:rc=$rc) "
              echo $JOBNAME " Count error($filename:rc=$rc) "
########### ANK-4043-00-00 MOD END
              exit ${G_RTN_ERROR}
          fi
      fi
########### ANK-4043-00-00 MOD END
        #--- フラグファイルの作成
########### ANK-4043-00-00 DEL START
#         cat /dev/null > ${KKIFE398_FLG}#    rc=$?
#          rc=$?
#          if [ $rc -ne 0 ]
#          then
#              sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File cat error($KKIFE398_FLG:rc=$rc) "
#              echo $JOBNAME " File cat error($KKIFE398_FLG:rc=$rc) "
#              exit ${G_RTN_ERROR}
#          fi
########### ANK-4043-00-00 DEL END   
########### ANK-4043-00-00 ADD START   
    done
########### ANK-4043-00-00 ADD END
fi
########### ANK-4043-00-00 ADD START

# 不要ファイルの削除
rm -rf ${KKIFM922_KK3221}
rm -rf ${KKIFM922_KK0171}
rm -rf ${KKIFM922_KK0351}
rm -rf ${KKIFM922_TEMP}
rm -rf ${KKIFM922_ZM0321}
rm -rf ${KKIFE398_TXT}
rm -rf ${KKIFM922_ZM0321_DAY}

########### ANK-4043-00-00 ADD END

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

exit $exit_rc
