#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：コンテンツ決済
#
# シェル名      ：コンテンツ同意対象データ集約
#
# 機能          ：コンテンツ利用開始対象抽出で抽出したサービス契約を対象にSYSID単位で1件となるように集約する。
#                 ファイルをコンテンツ自動同意分割数で分けて格納する。
#
# コマンド形式  ：EO40X0130J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v73.00.00      2024/11/19   FJ)丸田      【ANK-4570-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"
   OPD=${RSLT_OPEDATE}
fi

#---コンテンツ利用規約自動同意登録候補抽出ファイル
INPUT_FILE=${MID_DIR_CN}/CNIFM021002.csv

#---ＴＭＰ処理対象抽出ファイル
TMP_INPUT_FILE=${MID_DIR_CN}/CNIFM021002_TMP.csv

#---ＴＭＰ集約ファイル
APL_INPUT_FILE=${MID_DIR_CN}/CNIFM022_TMP.csv

OUTPUT_TMP=${MID_DIR_CN}/CNIFM022_ALL.csv

#
#--- クエリ編集(アンロード)
#       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：出力ファイル名
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
    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
}
#
#---業務で必要な変数定義
#
#xxx=xxxxxxx
##############################################################
# 業務処理
##############################################################
sh ${G_TOOLSH}/EOK010210J0.sh CS00025I $JOBNAME

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

P1="OPD=$OPD,"
P2="SVCCTL=JBSbatUnitServiceControl,"
P3="JOB=EO40X0130J0,"
P4="IND1=,"
P5="INF1=,"
P6="IND2=,"
P7="INF2=,"
P8="OTD1=CNIFM022.def,"
P9="OTF1=${OUTPUT_TMP},"
P10="OTD2=,"
P11="OTF2=,"
P12="TABLENAME=,"
P13="SQLKEY=,"
P14="SQLPARAM=,"
P15="ERRFILE=,"
P16="RECOVERY=,"
P17="BREAKPTN=,"
P18="FREE=${APL_INPUT_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

#
#--TMPファイルのクリア
#
cat /dev/null > $TMP_INPUT_FILE

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

#
#--TMPファイルのクリア
#
cat /dev/null > $APL_INPUT_FILE

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

#
#--- コンテンツ利用規約自動同意登録候補抽出ファイルをソートする。
#--- キー項目
# ソート条件
#     1.10:SYSID
#     8.10:コンテンツ申込番号

bsortex -sort key=1.10asc,8.10asc -record recform=txtcsv -input file=${INPUT_FILE} reclen=100 -output file=${TMP_INPUT_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

#
#--- コンテンツ利用規約自動同意登録候補抽出ファイルをSYSID基準１つのレコードだけ残す。
#--- マージ
# マージ条件
#     1.10:SYSID

bsortex -merge key=1.10asc -record recform=txtcsv -input file=${TMP_INPUT_FILE} reclen=100 -summary suppress first -output file=${APL_INPUT_FILE}


#
#---ＡＰＬ起動
#

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


# 業務パラメータ管理アンロードＳＱＬ定義
SQLFILE_CN_U_ZM0321_01=${SQL_DIR}/CN_U_ZM0321_01.sql
# コンテンツ自動同意分割数の結果ファイル
FILE_ZM0321_1=${MID_DIR_CN}/${JOBNAME}_ZM0321_1.csv

#--- ファイルの初期化を行う
cat /dev/null > ${FILE_ZM0321_1}

# 業務パラメータ管理をアンロードしてコンテンツ自動同意分割数を取得
WORK_PARAM_ID=CONT_AT_DOI_BNKT_CNT
EDIT_ULD_QUERY ${SQLFILE_CN_U_ZM0321_01} "${WORK_PARAM_ID} ${OPD} ${OPD}"
EXEC_UNLOAD ${SQL_WORK_FILE} ${FILE_ZM0321_1}

# ダブルクォーテーション削除
BNKT_CNT=`cat ${FILE_ZM0321_1} | sed -e 's/"//g'`
# 分割文字列初期化
CNT=1
#行数を取得する。
LINE_CNT=`cat ${OUTPUT_TMP} | wc -l`

#行数よりコンテンツ自動同意分割数が小さい場合
#処理分割数を行数にする。
if [ ${LINE_CNT} -lt ${BNKT_CNT} ]
then
    BNKT_CNT=${LINE_CNT}
fi

#繰返し作業で、分割処理数分のファイルを生成する。
while [ ${CNT} -le ${BNKT_CNT} ]
do
    #
    #--- 抽出条件：処理分割文字列
    #--- 出力ファイル名：TEMP_CNIFM022_処理分割文字列.csv
    #
    bsortex -copy -record recform=txtcsv \
       -input reclen=100 file=${OUTPUT_TMP} \
       -output file=${MID_DIR_CN}/TEMP_CNIFM022_${CNT}.csv case="9.1asc.eq.'${CNT}'" \
    
    #
    #--- ソートのキー：1.10ＳＹＳＩＤ
    #--- 出力ファイル名：CNIFM022_処理分割文字列.csv
    #
    bsortex -sort key=1.10asc -record recform=txtcsv -input file=${MID_DIR_CN}/TEMP_CNIFM022_${CNT}.csv reclen=100 -output file=${MID_DIR_CN}/CNIFM022_${CNT}.csv
    
    #ソート前ののTEMPファイルは削除する。
    rm -f ${MID_DIR_CN}/TEMP_CNIFM022_${CNT}.csv
    
    #ファイル生成が完了したら、処理分割数に１を足す。
    CNT=$((${CNT} + 1))
done

#--- 中間ファイル削除
#
rm -f ${MID_DIR_CN}/EO40X0110J0_CCIFM019002.csv
rm -f ${MID_DIR_CN}/EO40X0110J0_CCIFM020002.csv
rm -f ${MID_DIR_CN}/CNIFM021001.csv
rm -f ${TMP_INPUT_FILE}
rm -f ${INPUT_FILE}
rm -f ${APL_INPUT_FILE}
rm -f ${OUTPUT_TMP}
rm -f ${FILE_ZM0321_1}

exit_rc=$rc

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

exit $exit_rc
