#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：契約管理
#
# シェル名      ：圧着ハガキ抑止対象抽出
#
# 機能          ：対応記録から圧着ハガキ抑止となる可能性のあるデータを抽出し、
#                 圧着ハガキ抑止対象抽出ファイルに出力する。
#
# コマンド形式  ：EO2G90110J0.sh
#
# 実行環境      ：.../app/shl
#
# 終了ステータス：ゼロ以外異常
#
# 特記事項      ：特になし
#
# 変更履歴      ：変更日      変更者       障害／仕様変更No.
# v33.00.00      2017/09/02   FJ)藤本     【ANK-3233-00-00】(契アシRDSツール改善）圧着請求書拒否抽出
# v33.01.00      2017/09/13   FJ)藤本     【IT1-2017-0000116】対応記録のタイトルに特定記号が含まれた場合にシステムエラーが発生
# v69.00.00      2024/02/19   FJ)平野     【#83989】【eo顧客】EO2G90110J0 圧着ハガキ抑止対象抽出 異常終了
# v71.00.00      2024/05/14   FJ)日岡     【#82988】【eo顧客】EO2G90110J0 圧着ハガキ抑止対象抽出 瑕疵外障害改修対応
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

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

#
#--- 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}
}

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

#
#--- 1. バッチ運用日を取得する
#

if [ "${OPD}" = "" ]; then
    . EOK010310J0.sh "BDATE"
    OPD=${RSLT_OPEDATE}
fi

#
#--- 2. シェル変数定義
#

#--- アンロードSQL定義ファイル
# 対応記録アンロードSQL定義ファイル
ULDSQL_CR0011=${SQL_DIR}/KK_U_CR0011_01.sql

#--- 一時ファイル
# IT1-2017-0000116 ADD START
# #82988 DEL START
# 対応記録アンロードファイル(全件)
#ULDFILE_CR0011_ALL=${LOC_DIR_KK}/${JOBNAME}_CR0011_ULD_ALL.csv
# #82988 DEL END
# IT1-2017-0000116 ADD END
# 対応記録アンロードファイル
ULDFILE_CR0011=${LOC_DIR_KK}/${JOBNAME}_CR0011_ULD.csv
# 対応記録抽出結果ファイル
TMPFILE_CR0011=${LOC_DIR_KK}/${JOBNAME}_CR0011.csv
# 対応記録抽出結果ファイル(圧着請求書拒否キュー)
TMPFILE_CR0011_ATCHAKU_QUE=${LOC_DIR_KK}/${JOBNAME}_CR0011_ATCHAKU_QUE.csv
# 対応記録抽出結果ファイル(圧着請求書拒否キュー以外)
TMPFILE_CR0011_NOT_ATCHAKU_QUE=${LOC_DIR_KK}/${JOBNAME}_CR0011_NOT_ATCHAKU_QUE.csv
# 対応記録抽出結果ファイル(キーワード一致)
TMPFILE_CR0011_KEY_MATCH=${LOC_DIR_KK}/${JOBNAME}_CR0011_KEY_MATCH.csv
# 圧着ハガキ抑止対象抽出一時ファイル
TMPFILE_KKIFM741=${LOC_DIR_KK}/${JOBNAME}_KKIFM741.csv
# 対応記録アンロードファイルのレコード長
#  #83989 MOD START
#RECLEN_CR0011=600
RECLEN_CR0011=1200
#  #83989 MOD END

#--- 出力ファイル
# 圧着ハガキ抑止対象抽出ファイル
OUTFILE_KKIFM741=${MID_DIR_KK}/KKIFM741001.csv
# #82988 ADD START
# 対応記録フォーマットNGファイル
OUTNGFILE_KKIFM741=${MID_DIR_KK}/${JOBNAME}_CR0011_ULD_FMTNG.csv
# 対応記録アンロードファイル(全件)
ULDFILE_CR0011_ALL=${MID_DIR_KK}/${JOBNAME}_CR0011_ULD_ALL.csv
# #82988 ADD END

#--- 定数
# 圧着請求書拒否キューのキューBOX番号
QUE_BOX_NO_ATCHAKU=0000012542
# 抽出対象となるタイトルのキーワード
TITLE_KEYWORD=圧着請求

#
#--- 3. 対応記録のアンロード処理を実行する
#

# 対応記録から、問合せ状態コードが「クローズ」、「キャンセル」以外、「無効フラグ」が「有効」、「対応ユーザーID」が"mailuser"以外のデータを取得する
# IT1-2017-0000116 MOD START
#sh ${G_TOOLSH}/EOKULD02.sh ${ULDSQL_CR0011} ${ULDFILE_CR0011}
sh ${G_TOOLSH}/EOKULD02.sh ${ULDSQL_CR0011} ${ULDFILE_CR0011_ALL}
# IT1-2017-0000116 MOD END
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " unload error(${_SQL_FILE}:rc=$rc) "
    echo $JOBNAME " unload error(${_SQL_FILE}:rc=$rc) "
    exit ${G_RTN_ERROR}
fi

#
#--- 4. 対応記録アンロードファイルから圧着ハガキ抑止対象データを抽出する
#

# ① 圧着ハガキ抑止対象抽出ファイルの文字コードをUTF-8に変換する
# IT1-2017-0000116 MOD START
#nkf -x -w --overwrite ${ULDFILE_CR0011}
nkf -x -w --overwrite ${ULDFILE_CR0011_ALL}
# IT1-2017-0000116 MOD END

# IT1-2017-0000116 ADD START
# CSV形式が正しくない(フィールド数が8でない)レコードを除外する
# (対応記録.タイトルの文字化けにより「"」がなくなる場合がある)
awk -F '","' 'NF == 8 {print $0}' ${ULDFILE_CR0011_ALL} > ${ULDFILE_CR0011}
# IT1-2017-0000116 ADD END

# #82988 ADD START
# 対応記録フォーマットNGファイルに出力する。
awk -F '","' 'NF != 8 {print $0}' ${ULDFILE_CR0011_ALL} > ${OUTNGFILE_KKIFM741}
# #82988 ADD END

# ② 対応記録アンロードファイルから以下の条件のデータを抽出し、対応記録抽出結果ファイルに出力する
#    抽出条件：一時保存有無＝"0"(無)
#    抽出項目：一時保存有無、無効フラグ以外
# #82988 MOD START
#BSORT_DEF_CR0011="@TAIO_KIROK_NO=0.10 @SVC_KEI_NO=1.10 @UK_DTM=2.14 @TITLE=3.510 @QUE_BOX_NO=4.10 @CLOSE_FAIL_CD=5.1 @TMP_SAVE_UM=6.1 @MK_FLG=7.1"
#bsortex -define ${BSORT_DEF_CR0011} -copy -record recform=txtcsv \
#    -input file=${ULDFILE_CR0011} reclen=${RECLEN_CR0011} include="@TMP_SAVE_UMasc.eq.'0'.and.@MK_FLGasc.eq.'0'" \
#    -output file=${TMPFILE_CR0011} reconst="@TAIO_KIROK_NO,@SVC_KEI_NO,@UK_DTM,@TITLE,@QUE_BOX_NO,@CLOSE_FAIL_CD"
BSORT_DEF_CR0011="@TAIO_KIROK_NO=0.10 @SVC_KEI_NO=1.10 @UK_DTM=2.14 @TITLE=3.510 @QUE_BOX_NO=4.10 @CLOSE_FAIL_CD=5.1 @TMP_SAVE_UM=6.1 @MK_FLG=7.1 "
bsortex -define ${BSORT_DEF_CR0011} -copy -record recform=txtcsv \
    -input file=${ULDFILE_CR0011} reclen=${RECLEN_CR0011} include="@TMP_SAVE_UMasc.eq.'0'" \
    -output file=${TMPFILE_CR0011} reconst="@TAIO_KIROK_NO,@SVC_KEI_NO,@UK_DTM,@TITLE,@QUE_BOX_NO,@CLOSE_FAIL_CD"
# #82988 MOD END
rc=$?
if [ $rc -ne 0 ]
then
    BSORT_ERROR ${rc} ${ULDFILE_CR0011}
fi

# ③ 対応記録抽出結果ファイルのデータを、圧着請求書拒否キューと圧着請求書拒否キュー以外に分割し、
#    対応記録抽出結果ファイル(圧着請求書拒否キュー)、対応記録抽出結果ファイル(圧着請求書拒否キュー以外)にそれぞれ出力する
bsortex -define ${BSORT_DEF_CR0011} -copy -record recform=txtcsv \
    -input file=${TMPFILE_CR0011} reclen=${RECLEN_CR0011} \
    -output file=${TMPFILE_CR0011_ATCHAKU_QUE} case="@QUE_BOX_NOasc.eq.'${QUE_BOX_NO_ATCHAKU}'" \
    -output file=${TMPFILE_CR0011_NOT_ATCHAKU_QUE} case=other
rc=$?
if [ $rc -ne 0 ]
then
    BSORT_ERROR ${rc} ${TMPFILE_CR0011}
fi

# ④ 対応記録抽出結果ファイル(圧着請求書拒否キュー以外)から、タイトルに"圧着請求"が含まれているデータを
#    対応記録抽出結果ファイル(キーワード一致)に出力する
awk -F , '$4 ~/'"${TITLE_KEYWORD}"'/ {print $0}' ${TMPFILE_CR0011_NOT_ATCHAKU_QUE} > ${TMPFILE_CR0011_KEY_MATCH}

#
#--- 5. 圧着ハガキ抑止対象抽出ファイルを出力する
#

# ① 対応記録抽出結果ファイル(圧着請求書拒否キュー)と対応記録抽出結果ファイル(キーワード一致)を連結し、圧着ハガキ抑止対象抽出一時ファイルとして出力する
cat ${TMPFILE_CR0011_ATCHAKU_QUE} ${TMPFILE_CR0011_KEY_MATCH} > ${TMPFILE_KKIFM741}

# ② 圧着ハガキ抑止対象抽出一時ファイルに、項目「拒否理由」(空フィールド)を挿入し、圧着ハガキ抑止対象抽出ファイルとして出力する
bsortex -define ${BSORT_DEF_CR0011} -copy -record recform=txtcsv \
    -input file=${TMPFILE_KKIFM741} reclen=${RECLEN_CR0011} \
    -output file=${OUTFILE_KKIFM741} reconst="@TAIO_KIROK_NO,@SVC_KEI_NO,@UK_DTM,@TITLE,EMPTYA,@QUE_BOX_NO,@CLOSE_FAIL_CD"
rc=$?
if [ $rc -ne 0 ]
then
    BSORT_ERROR ${rc} ${TMPFILE_KKIFM741}
fi

# ③ 圧着ハガキ抑止対象抽出ファイルの文字コードをShift_JIS、改行コードをCRLFに変換する
nkf -x -s -Lw --overwrite ${OUTFILE_KKIFM741}

#
#--- 6. 終了処理
#

# 一時ファイル削除
# #82988 DEL START 
# IT1-2017-0000116 ADD START
#rm -f ${ULDFILE_CR0011_ALL}
# IT1-2017-0000116 ADD END
# #82988 DEL END
rm -f ${ULDFILE_CR0011}
rm -f ${TMPFILE_CR0011}
rm -f ${TMPFILE_CR0011_ATCHAKU_QUE}
rm -f ${TMPFILE_CR0011_NOT_ATCHAKU_QUE}
rm -f ${TMPFILE_CR0011_KEY_MATCH}
rm -f ${TMPFILE_KKIFM741}

# Javaプログラム開始(Program_Start)
sh ${G_TOOLSH}/EOK010210J0.sh CS00027I $JOBNAME

# Javaプログラム終了(Program_End)
sh ${G_TOOLSH}/EOK010210J0.sh CS00028I $JOBNAME

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

# #82988 MOD START
#exit ${G_RTN_NORMAL}
if [ ! -s ${OUTNGFILE_KKIFM741} ];
then
   exit ${G_RTN_NORMAL}
else
   sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " マイナーエラー(rc=$G_RTN_WARN) "
   echo $JOBNAME " マイナーエラー(rc=$G_RTN_WARN) "
   exit ${G_RTN_WARN}
fi
# #82988 MOD END
