#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：請求収納
#
# シェル名      ：請求書送信不可リスト作成
#
# 機能          ：修正版請求書印刷データ差込(口振/窓口/クレジット)で差し込めなかった修正版請求書に対して請求書送信不可リスト作成する。
#
# コマンド形式  ：EO61O0540J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v67.00.00     2023/06/19    FJ）松永     【ANK-4401-00-00】インボイス対応 新規作成
#               2023/08/23    FJ) 松永     【IT2-2023-0000007】請求書泣き別れデータ不正
#               2024/01/10    FJ) 松永     【#83557】Javaヒープ領域不足エラー
#
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

#
#---業務で必要な変数定義
#
# 入力ファイルの定義
#
#▼▼▼ IT2-2023-0000007 DEL START ▼▼▼
# 請求書発行抑止リスト
#INFILE1=${MID_DIR_CH}/CHIFM428001.csv
# 請求書送信不可リスト(口振)
#INFILE2=${MID_DIR_CH}/CHIFM428002.csv
# 請求書送信不可リスト(窓口)
#INFILE3=${MID_DIR_CH}/CHIFM428003.csv
# 請求書送信不可リスト(クレジット)
#INFILE4=${MID_DIR_CH}/CHIFM428004.csv
#▲▲▲ IT2-2023-0000007 DEL END ▲▲▲
#
# 一時ファイル
#
#▼▼▼ #83557 ADD START ▼▼▼
# 未差込請求書内訳情報組立マージ後ファイル
INFILE_CHIFM429007=${MID_DIR_CH}/CHIFM429007.txt
# 請求契約情報ファイル
INFILE_CHIFM048006=${MID_DIR_CH}/CHIFM048006.csv
# 未差込請求書内訳情報組立マージ後ファイル(TSV化)
TSV_CHIFM429007=${MID_DIR_CH}/CHIFM429007.tsv
# 未差込請求書内訳情報組立マージ後ファイル(CSV化)
CSV_CHIFM429007=${MID_DIR_CH}/CHIFM429007.csv
# マッチング後の請求契約情報ファイル
MATCHING_CHIFM048006=${MID_DIR_CH}/MATCHING_CHIFM048006.csv
# マッチング定義ファイル(請求契約情報ファイル - 未差込請求書内訳情報組立マージ後ファイル(TSV化))
MATCHDEF_CHIFM048006=${G_TOOLSH}/util/def/CH_CM_0291.def
#▲▲▲ #83557 ADD END ▲▲▲
#
#▼▼▼ IT2-2023-0000007 DEL START ▼▼▼
# 請求送信不可リスト(マージソート前)
#TMPFILE_CHIFM428005=${LOC_DIR_CH}/${JOBNAME}_TMPFILE_CHIFM428005.csv
# 請求送信不可リスト(マージソート後)
#INFILE_CHIFM428005=${LOC_DIR_CH}/INFILE_CHIFM428005.csv
#▲▲▲ IT2-2023-0000007 DEL END ▲▲▲
# 請求送信不可リスト(成形前)
OUTFILE_CHIFM428005=${LOC_DIR_CH}/OUTFILE_CHIFM428005.csv
# 請求送信不可リストヘッダ
TMPFILE_CHLST10201_HEAD=${LOC_DIR_CH}/${JOBNAME}_CHLST10201_HEAD.csv
# 請求送信不可リスト
OUTFILE_CHLST10201=${MID_DIR_CH}/CHLST10201.csv

#
##############################################################
# 共通関数
##############################################################

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

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

#
#---パラメタ定義
#
#▼▼▼ IT2-2023-0000007 MOD START ▼▼▼
#P1="OPD=,"
#P2="SVCCTL=JBSbatMultiServiceControl,"
#P3="JOB=EO61O0540J0,"
#P4="IND1=CHIFM428.def,"
#P5="INF1=${LOC_DIR_CH}/INFILE_CHIFM428005.csv,"
#P6="IND2=,"
#P7="INF2=,"
#P8="OTD1=CHIFM431.def,"
#P9="OTF1=${LOC_DIR_CH}/OUTFILE_CHIFM428005.csv,"
#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"

#▼▼▼ #83557 MOD START ▼▼▼
#P1="OPD=,"
#P2="SVCCTL=JBSbatMultiServiceControl,"
#P3="JOB=EO61O0540J0,"
#P4="IND1=CHIFM430.def,"
#P5="INF1=${MID_DIR_CH}/CHIFM429007.txt,"
#P6="IND2=,"
#P7="INF2=,"
#P8="OTD1=CHIFM431.def,"
#P9="OTF1=${LOC_DIR_CH}/OUTFILE_CHIFM428005.csv,"
#P10="OTD2=,"
#P11="OTF2=,"
#P12="TABLENAME=,"
#P13="SQLKEY=,"
#P14="SQLPARAM=,"
#P15="ERRFILE=,"
#P16="RECOVERY=,"
#P17="BREAKPTN=,"
#P18="FREE=${MID_DIR_CH}/CHIFM048006.csv"
#PARA="$P1$P2$P3$P4$P5$P6$P7$P8$P9$P10$P11$P12$P13$P14$P15$P16$P17$P18"

P1="OPD=,"
P2="SVCCTL=JBSbatMultiServiceControl,"
P3="JOB=EO61O0540J0,"
P4="IND1=CHIFM430.def,"
P5="INF1=${MID_DIR_CH}/CHIFM429007.txt,"
P6="IND2=,"
P7="INF2=,"
P8="OTD1=CHIFM431.def,"
P9="OTF1=${LOC_DIR_CH}/OUTFILE_CHIFM428005.csv,"
P10="OTD2=,"
P11="OTF2=,"
P12="TABLENAME=,"
P13="SQLKEY=,"
P14="SQLPARAM=,"
P15="ERRFILE=,"
P16="RECOVERY=,"
P17="BREAKPTN=,"
P18="FREE=${MATCHING_CHIFM048006}"
PARA="$P1$P2$P3$P4$P5$P6$P7$P8$P9$P10$P11$P12$P13$P14$P15$P16$P17$P18"
#▲▲▲ IT2-2023-0000007 MOD END ▲▲▲
#▲▲▲ #83557 MOD END ▲▲▲

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

#▼▼▼ IT2-2023-0000007 DEL START ▼▼▼
#
# 請求抑止リスト、請求書送信不可リスト(口振・窓口・クレジット)の４つのファイルをマージする。
#bsort -s -z4000 -Tfix -01.10asca,12.6asca -o ${TMPFILE_CHIFM428005} ${INFILE1} ${INFILE2} ${INFILE3} ${INFILE4}
#
#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
#
#
# 請求契約番号・請求年月単位でソートし、請求契約番号(昇順)・請求年月(昇順)、請求抑止コード(降順)の一番上のレコードを取得する。
#BSORT_DEF_CHIFM428005_CUR="@SEIKY_KEI_NO=0.10 @SEIKY_YM=1.6 @SENDS_FUKA_RIYU=2.12 @TOKUSOKU_STAT=3.2 @TOKUSOKU_NAIYO=4.18 @SEIKY_YOKSI_CD=5.2 @YOKSI_NAIYO=6.20"
#bsortex -define ${BSORT_DEF_CHIFM428005_CUR} -sort key="@SEIKY_KEI_NOasca,@SEIKY_YMasca,@SEIKY_YOKSI_CDascr" -record recform=txtcsv \
#        -input file=${TMPFILE_CHIFM428005} reclen=1000 \
#               | bsortex -define ${BSORT_DEF_CHIFM428005_CUR} -merge key="@SEIKY_KEI_NOasc,@SEIKY_YMasc" -record recform=txtcsv \
#                         -input reclen=1000 -summary suppress first \
#        -output file=${INFILE_CHIFM428005}
#rc=$?
#if [ $rc -ne 0 ]
#then
#    BSORT_ERROR ${rc} ${TMPFILE_CHIFM428005}
#fi
#▲▲▲ IT2-2023-0000007 DEL END ▲▲▲

#▼▼▼ #83557 ADD START ▼▼▼
# txtファイルの未差込請求書内訳情報組立マージ後ファイルをCSVに変換
cat ${INFILE_CHIFM429007} | perl -lane 'print(join "\t", unpack "a1a3a10a1297")' > ${TSV_CHIFM429007}

# tsvからcsvへ変換
cat ${TSV_CHIFM429007} | tr '\t' ',' > ${CSV_CHIFM429007}

# 請求契約情報ファイルとCSVに変換した未差込請求書内訳情報組立マージ後ファイルをマッチング
export INFILE_CHIFM048006
export CSV_CHIFM429007
EXEC_MATCHING ${MATCHING_CHIFM048006} ${MATCHDEF_CHIFM048006}
#▲▲▲ #83557 ADD END ▲▲▲

#
# JAVA実行
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

# 改行コードをCRLFに置換
#
sed -i "s/$/\r/g" ${OUTFILE_CHIFM428005}

#
# ヘッダ行を追加する
#
echo '"請求契約番号","請求年月","送信不可理由","督促ステータス","督促内容","請求抑止コード","抑止内容","支払方法コード","支払方法内容"' | nkf -s -Lw > ${TMPFILE_CHLST10201_HEAD}
cat ${TMPFILE_CHLST10201_HEAD} ${OUTFILE_CHIFM428005} > ${OUTFILE_CHLST10201}

#
# 一時ファイルの削除
#
#▼▼▼ IT2-2023-0000007 DEL START ▼▼▼
#rm -f ${TMPFILE_CHIFM428005}
#rm -f ${INFILE_CHIFM428005}
#▲▲▲ IT2-2023-0000007 DEL END ▲▲▲
rm -f ${OUTFILE_CHIFM428005}
rm -f ${TMPFILE_CHLST10201_HEAD}

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

exit ${G_RTN_NORMAL}
