#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：請求収納
#
# シェル名      ：請求内訳当月分抽出
#
# 機能          ：請求内訳当月分から当月請求金額の合計を取得する。
#料金項目コードは、料金項目抽出変換マスタで定義する。
#
#アンロード処理については、シェルの起動となる。
#EOKULD03.sh ${SQL_DIR}/CH_U_CH0051_01_WRK.sql ${MID_DIR_CH}/CHIFM050003_WRK.csv EO6020110J0
# 
#${SQL_DIR}/CH_U_CH0051_01.sqlを、${SQL_DIR}/CH_U_CH0051_01_WRK.sqlにコピーし、SQL文の生成を行う。${SQL_DIR}/CH_U_CH0051_01_WRK.sqlに対し、バインド変数箇所に業務日付を設定し、アンロード処理（EOKULD03.sh）の起動を行う。
#
#【出力ファイル項目定義】
#[CHIFM050]合算請求対象内訳情報 参照
#
#
# コマンド形式  ：EO6020110J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v3.00           2012/07/27  FJ）冨井     【ST2-2012-0001211】ヒープサイズ拡張
# v3.01           2012/11/02  FJ）加島     【ST4-2012-0000006】ヒープサイズ指定方法変更
# v4.00           2013/01/07  FJ）後藤     処理パターン変更
# v4.01           2013/01/08  FJ）指原     アンローダー実装
# v4.01           2013/01/10  FJ）後藤     改行コード変換追加
# v4.03           2013/03/18  FJ）広野     性能改善: アンロードの参照先スクリプト変更にともなう修正
# v4.04           2013/03/30  FJ）狭間     性能改善の為、アンロード方法の見直しと請求アンロード共通化
# v5.00           2013/10/04  FJ）黒木     【OM-2013-0002184】全明細取消し時の不具合対応
# v8.00           2013/12/27  FJ）伊藤     【ANK-1794-00-00】項目追加対応
# v21.00          2015/12/11  FJ）李　擇臣 【IT2-2015-0000041】レコード長の指定に誤りがあります．
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

#
#---業務で必要な変数定義
#
#--- ワークファイル削除フラグ
WK_RM=true

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

##############################################################
# 業務処理
##############################################################

#
#--- ファイル定義
#
#--- 入力ファイル（請求アンロードファイル）
INFILE_CHIFM181001=${MID_DIR_CH}/CHIFM181001.csv
INFILE_CHIFM181001_WRK=${MID_DIR_CH}/${JOBNAME}_CHIFM181001_UNLOADER_WK_1.csv

#--- 入力ファイル（請求内訳アンロードファイル）
INFILE_CHIFM182001=${MID_DIR_CH}/CHIFM182001.csv
INFILE_CHIFM182001_WRK=${MID_DIR_CH}/${JOBNAME}_CHIFM182001_UNLOADER_WK_1.csv

#--- 出力ファイル
OUTFILE_CHIFM182001_WRK1=${MID_DIR_CH}/${JOBNAME}_CHIFM182001_OUT_WRK1.csv
OUTFILE_CHIFM050003=${MID_DIR_CH}/CHIFM050003.csv
OUTFILE_CHIFM050007=${MID_DIR_CH}/CHIFM050007.csv
OUTFILE_CHIFM050008=${MID_DIR_CH}/CHIFM050008.csv
OUTFILE_CHIFM050003_WRK2=${MID_DIR_CH}/${JOBNAME}_CHIFM050003_OUT_WRK2.csv

#--- 1.料金項目変換（CH_M_PRC_KMK_CS_CHGE）
SQLFILE_CH0401_11=${SQL_DIR}/CH_U_CH0401_11.sql
SQLFILE_CH0401_11_WRK=${SQL_DIR}/${JOBNAME}_CH_U_CH0401_11_UNLOADER_WK_1.sql

CSVFILE_CH0401_11=${MID_DIR_CH}/${JOBNAME}_CH_U_CH0401_11_UNLOADER_WK_1.csv

#--- 請求内訳当月分抽出１
DEFFILE_CM_0103=${G_TOOLSH}/util/def/CH_CM_0103.def
DEFFILE_CM_0103_WRK=${G_TOOLSH}/util/def/${JOBNAME}_CH_CM_0103_MATCHIG_WK_1.def

#--- 請求内訳当月分抽出２
DEFFILE_CM_0060=${G_TOOLSH}/util/def/CH_CM_0060.def
DEFFILE_CM_0060_WRK=${G_TOOLSH}/util/def/${JOBNAME}_CH_CM_0060_MATCHIG_WK_1.def

#
#--- 各ファイルの存在チェックを行う
#
#--- 入力ファイル（請求アンロードファイル）
if [ ! -r ${INFILE_CHIFM181001} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${INFILE_CHIFM181001}) "
    echo $JOBNAME " File is nonexist(${INFILE_CHIFM181001}) "
    exit ${G_RTN_ERROR}
fi
#--- 入力ファイル（請求内訳アンロードファイル）
if [ ! -r ${INFILE_CHIFM182001} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${INFILE_CHIFM182001}) "
    echo $JOBNAME " File is nonexist(${INFILE_CHIFM182001}) "
    exit ${G_RTN_ERROR}
fi
#--- 1.料金項目変換（CH_M_PRC_KMK_CS_CHGE）
if [ ! -r ${SQLFILE_CH0401_11} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${SQLFILE_CH0401_11}) "
    echo $JOBNAME " File is nonexist(${SQLFILE_CH0401_11}) "
    exit ${G_RTN_ERROR}
fi
#--- 請求内訳当月分抽出１
if [ ! -r ${DEFFILE_CM_0103} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${DEFFILE_CM_0103}) "
    echo $JOBNAME " File is nonexist(${DEFFILE_CM_0103}) "
    exit ${G_RTN_ERROR}
fi
#--- 請求内訳当月分抽出２
if [ ! -r ${DEFFILE_CM_0060} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${DEFFILE_CM_0060}) "
    echo $JOBNAME " File is nonexist(${DEFFILE_CM_0060}) "
    exit ${G_RTN_ERROR}
fi

#--- SQLパラメータセット

#
#--- ＳＱＬ準備
#
#--- 1.料金項目変換（CH_M_PRC_KMK_CS_CHGE）
cp -f ${SQLFILE_CH0401_11} ${SQLFILE_CH0401_11_WRK}
sed -i -e "s%\:OPE_DATE%'${RSLT_OPEDATE}'%"  ${SQLFILE_CH0401_11_WRK}

#--- 請求内訳当月分抽出１
cp -f ${DEFFILE_CM_0103} ${DEFFILE_CM_0103_WRK}
sed -i -e "s%\:CHIFM182001%${INFILE_CHIFM182001_WRK}%"  ${DEFFILE_CM_0103_WRK}
sed -i -e "s%\:CH_U_CH0401_11%${CSVFILE_CH0401_11}%"    ${DEFFILE_CM_0103_WRK}

#--- 請求内訳当月分抽出２
cp -f ${DEFFILE_CM_0060} ${DEFFILE_CM_0060_WRK}
sed -i -e "s%\:CHIFM181001%${INFILE_CHIFM181001_WRK}%"  ${DEFFILE_CM_0060_WRK}
sed -i -e "s%\:CHIFM182001%${OUTFILE_CHIFM182001_WRK1}%"  ${DEFFILE_CM_0060_WRK}

#
#--- アンロードファイルのクリアを行う
#
cat /dev/null > $OUTFILE_CHIFM050003_WRK2
cat /dev/null > $OUTFILE_CHIFM050007
cat /dev/null > $OUTFILE_CHIFM050008
cat /dev/null > $OUTFILE_CHIFM050003

#
#--- サブルーチン（UNLOAD）
#
UNLOAD(){
#unload
sh ${G_TOOLSH}/EOKULD03.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
}

#
#--- MAIN
#

#--- 入力ファイル（請求アンロードファイル）
#--- 絞込みを行う
# IT2-2015-0000041 DEL START
#bsortex \
#  -copy \
#  -record recform=txtcsv \
#  -input reclen=120 \
#  include="4.1asc.eq.'0'" \
#  file=${INFILE_CHIFM181001} \
#  -output file=${INFILE_CHIFM181001_WRK} \
#  reconst="0.12,2.10,3.6"
# IT2-2015-0000041 DEL END

# IT2-2015-0000041 ADD START
bsortex \
  -copy \
  -record recform=txtcsv \
  -input reclen=180 \
  include="4.1asc.eq.'0'" \
  file=${INFILE_CHIFM181001} \
  -output file=${INFILE_CHIFM181001_WRK} \
  reconst="0.12,2.10,3.6"
# IT2-2015-0000041 ADD 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

#--- 入力ファイル（請求内訳アンロードファイル）
#--- 絞込みを行う
bsortex \
  -copy \
  -record recform=txtcsv \
  -input reclen=180 \
  file=${INFILE_CHIFM182001} \
  -output file=${INFILE_CHIFM182001_WRK} \
  reconst="0.12,1.10,2.6,3.14,4.10,5.2,6.3,7.12,8.11,10.8,11.8,12.12,9.6,14.30"
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

#
#--- アンロード処理
#
UNLOAD ${SQLFILE_CH0401_11_WRK} ${CSVFILE_CH0401_11}

# すべての抽出が終了するのを待つ
wait

# マッチング処理→入力ファイル請求内訳１
(export ZTLQUOTES=''
export ZTLOUTFILE=${OUTFILE_CHIFM182001_WRK1}
${G_TOOLSH}/util/bin/ZTLMAT01 ${DEFFILE_CM_0103_WRK})
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " MACHING1 Error($SVC ZTLOUTFILE:rc=$rc) "
    echo $JOBNAME " MACHING1 Error($SVC ZTLOUTFILE:rc=$rc) "
    exit ${G_RTN_ERROR}
fi

# マッチング処理→入力ファイル請求内訳２
(export ZTLQUOTES=''
export ZTLOUTFILE=${OUTFILE_CHIFM050007}
${G_TOOLSH}/util/bin/ZTLMAT01 ${DEFFILE_CM_0060_WRK})
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " MACHING2 Error($SVC ZTLOUTFILE:rc=$rc) "
    echo $JOBNAME " MACHING2 Error($SVC ZTLOUTFILE:rc=$rc) "
    exit ${G_RTN_ERROR}
fi


sh ${G_TOOLSH}/EOK010210J0.sh CS00025I $JOBNAME

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

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


#--- ソートを行う
#--- 改行コードをwindows (CRLF)に変換する
bsortex \
  -sort key="0.10asc,7.12asc,1.6asc,8.11asc" \
  -record recform=txtcsv \
  -input reclen=200 \
  file=${OUTFILE_CHIFM050008} \
  -output file=${OUTFILE_CHIFM050003} linedlmt=crlf
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

# ワーク削除
if [ ${WK_RM} = "true" ] ;then 
    rm -f ${OUTFILE_CHIFM182001_WRK1}
    rm -f ${INFILE_CHIFM181001_WRK}
    rm -f ${INFILE_CHIFM182001_WRK}
    rm -f ${SQLFILE_CH0401_11_WRK}
    rm -f ${CSVFILE_CH0401_11}
    rm -f ${DEFFILE_CM_0060_WRK}
    rm -f ${DEFFILE_CM_0103_WRK}
fi

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

exit $exit_rc
