#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：請求収納
#
# シェル名      ：クレジットカード情報抽出
#
# 機能          ：請求書発行判定でクレジットカードの有効期限切れや有効性NGを判定するためのクレジットカード情報を抽出する。
#
# コマンド形式  ：EO60301F5J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
#   v57.00      ：2022/03/04  FJ) 麻生    【ANK-3943-00-00】有効性NG時のインフォメーションコード追加
#   v57.01      ：2022/03/13  FJ) 麻生    【IT2-2022-0000001】有効期限切れの請求先に有効性NGのインフォメーションコードが出力
#
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

#
#---業務で必要な変数定義
#
#xxx=xxxxxxx
RECLEN_KK0521_ULD="61"
RECLEN_KK0521_WK="43"
# v57.01 IT2-2022-0000001 MOD START
#RECLEN_KK0491_WK="59"
RECLEN_KK0491_WK="28"
#RECLEN_OUTFILE_WK1="40"
#RECLEN_OUTFILE_WK2="13"
RECLEN_OUTFILE_WK="13"

##--- 請求処理日
#EVENT_CD="04"
#--- 料金計算日
EVENT_CD="03"
# v57.01 IT2-2022-0000001 MOD END
#--- 有効期限切れ（VISA SMCC）
NG_KBN_EXPIRED="0"
#--- 有効性NG
NG_KBN_YUKOSEI_NG="1"
##############################################################
# 業務処理
##############################################################
sh ${G_TOOLSH}/EOK010210J0.sh CS00025I $JOBNAME

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

#---ワークファイル削除モード
WK_RM=true

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

P1="OPD=,"
P2="SVCCTL=,"
P3="JOB=EO60301F5J0,"
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=,"
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

#
#--- ファイル定義
#

#--- SQLファイル
SQLFILE_KK0521=${SQL_DIR}/CH_U_KK0521_03.sql

#--- マッチング定義ファイル
DEFFILE_CH0259=${G_TOOLSH}/util/def/CH_CM_0259.def

#--- 請求契約(KK_T_SEIKY_KEI)
COMULD2_KK0491_ALL=${MID_DIR_CC}/CCIFM030001.csv
CSVFILE_KK0491=${MID_DIR_CH}/${JOBNAME}_CCIFM030001.csv

#--- クレジットカード(KK_T_CRECARD)
CSVFILE_KK0521_ULD=${MID_DIR_CH}/${JOBNAME}_CH_U_KK0521_03_ULD.csv
CSVFILE_KK0521_SORT=${MID_DIR_CH}/${JOBNAME}_KK0521_SORT.csv
CSVFILE_KK0521=${MID_DIR_CH}/${JOBNAME}_KK0521.csv

#--- 出力ファイル(クレジットカード情報)
OUTFILE_WK=${MID_DIR_CH}/${JOBNAME}_CHIFM407001_WK.csv
OUTFILE=${MID_DIR_CH}/CHIFM407001.csv

#
#--- 各ファイルの存在チェックを行う
#

#--- クレジットカードアンロード用SQLファイル
if [ ! -r ${SQLFILE_KK0521} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${SQLFILE_KK0521}) "
    echo $JOBNAME " File is nonexist(${SQLFILE_KK0521}) "
    exit ${G_RTN_ERROR}
fi

#--- マッチング定義ファイル
if [ ! -r ${DEFFILE_CH0259} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${DEFFILE_CH0259}) "
    echo $JOBNAME " File is nonexist(${DEFFILE_CH0259}) "
    exit ${G_RTN_ERROR}
fi

#--- 請求契約共通アンロードファイル
if [ ! -r ${COMULD2_KK0491_ALL} ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " File is nonexist(${COMULD2_KK0491_ALL}) "
    echo $JOBNAME " File is nonexist(${COMULD2_KK0491_ALL}) "
    exit ${G_RTN_ERROR}
fi

#
#--- 抽出処理
#

#- 請求年月取得
. EO3SEIKYYM2.sh ${EVENT_CD} ${RSLT_OPEDATE} ${JOBNAME}
# v57.01 IT2-2022-0000001 ADD START
#- 過去直近の料金計算日を取得
. EO3EVENTYMD.sh ${EVENT_CD} ${SEIKY_YM} ${JOBNAME}
PRCDATE=${EVENT_YMD}
# v57.01 IT2-2022-0000001 ADD END

#--- 請求契約(KK_T_SEIKY_KEI)
(
# v57.01 IT2-2022-0000001 MOD START
##--- 請求契約番号、請求方法番号(クレジットカード)毎の最新世代を取得する
##請求契約共通アンロード項目
##      0.10 ：請求契約番号
##      1.17 ：世代登録年月日時分秒
##      8.12 ：請求方法番号(クレジットカード)
##      11.8 ：予約適用年月日
##      13.1 ：予約適用コード
#bsortex \
#    -sort key="0.10asc,8.12asc,11.8ascr,1.17ascr" \
#    -record recform=txtcsv \
#    -input reclen=${ULD2_REC_LEN_KK0491} file=${COMULD2_KK0491_ALL} include="13.1asc.eq.'2'" \
#    -output reconst="0.10,8.12,11.8,1.17" \
# | bsortex \
#    -merge key="0.10asc,1.12asc" \
#    -record recform=txtcsv \
#    -input reclen=${RECLEN_KK0491_WK} \
#    -summary suppress first \
#    -output file=${CSVFILE_KK0491} omit="1.12asc.lt.' '"

#--- 料金計算日時点のカレントを取得する
#請求契約共通アンロード項目
#      0.10 ：請求契約番号
#      1.17 ：世代登録年月日時分秒
#      8.12 ：請求方法番号(クレジットカード)
#      11.8 ：予約適用年月日
#      13.1 ：予約適用コード
bsortex \
    -sort key="0.10asc,11.8ascr,1.17ascr" \
    -record recform=txtcsv \
    -input reclen=${ULD2_REC_LEN_KK0491} file=${COMULD2_KK0491_ALL} include="13.1asc.eq.'2'.and.11.8asc.le.'${PRCDATE}'" \
    -output reconst="0.10,8.12" \
 | bsortex \
    -merge key="0.10asc" \
    -record recform=txtcsv \
    -input reclen=${RECLEN_KK0491_WK} \
    -summary suppress first \
    -output file=${CSVFILE_KK0491} omit="1.12asc.lt.' '"
# v57.01 IT2-2022-0000001 MOD END

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

#--- ダブルクォーテーションを除去
sed -i -e 's/"//g' ${CSVFILE_KK0491}
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " sed Error (${CSVFILE_KK0491} sed:rc=$rc) "
    echo $JOBNAME " sed Error (${CSVFILE_KK0491} sed:rc=$rc) "
    exit ${G_RTN_ERROR}
fi
) &
pid_KK0491=$!

#--- クレジットカード(KK_T_CRECARD)
(
#クレジットカードアンロード項目
#      0.12 ：請求方法番号(クレジットカード)
#      1.17 ：世代登録年月日時分秒
#      2.3  ：クレジットカードステータス
#      3.6  ：クレジットカード無効年月
#      4.6  ：クレジットカード有効期限
#      5.5  ：仕向先会社コード
#      6.5  ：異動区分
sh ${G_TOOLSH}/EOKULD03.sh ${SQLFILE_KK0521} ${CSVFILE_KK0521_ULD}

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

#--- カレントを取得して世代登録年月日時分秒以外を残す
bsortex \
    -sort key="0.12asc,1.17ascr" \
    -record recform=txtcsv \
    -input reclen=${RECLEN_KK0521_ULD} file=${CSVFILE_KK0521_ULD} \
    -output reconst="0.12,2.3,3.6,4.6,5.5,6.5" \
 | bsortex -merge key="0.12asc" \
    -record recform=txtcsv \
    -input reclen=${RECLEN_KK0521_WK} \
    -summary suppress first \
    -output file=${CSVFILE_KK0521_SORT}

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

#--- 有効期限切れ（VISA SMCC）と有効性NGの対象を抽出する
#
#有効期限切れ（VISA SMCC）
#      クレジットカードステータス($2)  ＝  "100"(審査済)
#      異動区分($6)                    ＝  "00092"(クレジットカード有効期限無効)
#      クレジットカード有効期限($4)    ＜  請求年月
#      仕向先会社コード($5)            ＝  "99663"（VISA SMCC）
#有効性NG
#      クレジットカードステータス($2)  ＝  "100"(審査済)
#      クレジットカード無効年月($3)    ≦  請求年月
awk -F, -v SEIKY_YM=${SEIKY_YM} -v NG_KBN_EXPIRED=${NG_KBN_EXPIRED} -v NG_KBN_YUKOSEI_NG=${NG_KBN_YUKOSEI_NG} \
  '($2=="100"){if($6=="00092"&&$4<SEIKY_YM&&$5=="99663"){print $1 "," NG_KBN_EXPIRED}else if($3!=""&&$3<=SEIKY_YM){print $1 "," NG_KBN_YUKOSEI_NG}}' ${CSVFILE_KK0521_SORT} > ${CSVFILE_KK0521}

rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " awk Error (${CSVFILE_KK0521_SORT} awk:rc=$rc) "
    echo $JOBNAME " awk Error (${CSVFILE_KK0521_SORT} sort:rc=$rc) "
    exit ${G_RTN_ERROR}
fi
) &
pid_KK0521=$!

wait ${pid_KK0491}
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " Sub process Error (KK_T_SEIKY_KEI Sub process:rc=$rc) "
    echo $JOBNAME " Sub process Error (KK_T_SEIKY_KEI Sub process:rc=$rc) "
    exit ${G_RTN_ERROR}
fi

wait ${pid_KK0521}
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " Sub process Error (KK_T_CRECARD Sub process:rc=$rc) "
    echo $JOBNAME " Sub process Error (KK_T_CRECARD Sub process:rc=$rc) "
    exit ${G_RTN_ERROR}
fi

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

#--- 抽出した有効期限切れ（VISA SMCC）と有効性NGの対象を請求契約とマッチング
export ZTLQUOTES=''
export ZTLOUTFILE=${OUTFILE_WK}
export CSVFILE_KK0491
export CSVFILE_KK0521
${G_TOOLSH}/util/bin/ZTLMAT01 ${DEFFILE_CH0259}

rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " マッチング処理 Error (${ZTLOUTFILE}:rc=$rc) "
    echo $JOBNAME " マッチング処理 Error (${ZTLOUTFILE}:rc=$rc) "
    exit ${G_RTN_ERROR}
fi

#
#--- 出力ファイル作成
#

# v57.01 IT2-2022-0000001 MOD START
##--- 請求契約番号毎に最後のクレジットカード情報のみ出力する
#bsortex \
#    -sort key="0.10asc,2.8ascr,3.17ascr" \
#    -record recform=txtcsv \
#    -input reclen=${RECLEN_OUTFILE_WK1} file=${OUTFILE_WK} \
#    -output reconst="0.10,1.1" \
# | bsortex -merge key="0.10asc" \
#    -record recform=txtcsv \
#    -input reclen=${RECLEN_OUTFILE_WK2} \
#    -summary suppress first \
#    -output file=${OUTFILE}

#--- 請求契約番号でソートしてクレジットカード情報を作成
bsortex \
    -sort key="0.10asc" \
    -record recform=txtcsv \
    -input reclen=${RECLEN_OUTFILE_WK} file=${OUTFILE_WK} \
    -output file=${OUTFILE}
# v57.01 IT2-2022-0000001 MOD END

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

#ワーク削除
if [ $WK_RM = "true" ]
then
    rm -f ${CSVFILE_KK0491}
    rm -f ${CSVFILE_KK0521_ULD}
    rm -f ${CSVFILE_KK0521_SORT}
    rm -f ${CSVFILE_KK0521}
    rm -f ${OUTFILE_WK}
fi

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

exit ${G_RTN_NORMAL}
