#!/bin/bash
##############################################################
# システム名    ：eo顧客基幹システム
#
# サブシステム名：請求収納
#
# シェル名      ：社内使用分請求データ抽出
#
# 機能          ：1. 社内使用分請求データ抽出
# 
#(1) 
#請求テーブル・請求内訳テーブルより、社内使用分請求を行った情報を抽出する。
#※「CHPRC03001：クレジット入金データ作成」の「クレジット請求データ抽出」と同じ処理を使用する。
#
#
# コマンド形式  ：EO60V0110J0.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/02/06  FJ）狭間     【ST4-2013-0000076】速度改善の為、基盤Ｔ修正を組込。
# v4.01           2013/03/18  FJ）広野      性能改善: アンロードの参照先スクリプト変更にともなう修正
# v4.01.01        2013/04/08  FJ) 狭間     【ST4-2013-0000286】性能改善の為、アンロード並列化及び処理見直しと水平展開
# v4.02           2013/05/21  FJ) 前田     【TA1-2013-0000026】バッチ運用日を日中バッチ運用日から取得するように修正
# v5.00           2013/08/30  伊藤         【OM-2013-0001277】BSORTEX検索条件に「請求.請求種別コード　＝　定例請求」を追加
##############################################################

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

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

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

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

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

#
#---OPD
#
OPD=$1

#
#---業務で必要な変数定義
#
[ $# -eq 2 ] &&TAJUKIDO="_$2"

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

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

#---マッチング処理でLeftjoinがNULL時に"を付けなくする（マッチング使用時は必須）
export ZTLQUOTES=''

BSDEF_DIR=${BSDEF_DIR:-${G_TOOLSH}/bsort/def}
CMDEF_DIR=${CMDEF_DIR:-${G_TOOLSH}/util/def}

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

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

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

#--- 小細工関数
# ファイルに記述された${ENV}を値に置換して表示
function resolveenv () {
eval "cat <<:EOF
`cat $1`
:EOF"
}

# 中間ファイル名を生成/削除する
function createtempname () {
  if [ -z "$1" ]; then
    echo "${TEMPLIST[*]}"
  else
    let TEMPNAME_SEQ++
    . EOK010410J0.sh "1"
    TEMPNAME=$1_$$_${RSLT_SYSDATE}_${TEMPNAME_SEQ}$2
    TEMPLIST[${TEMPNAME_SEQ}]=${TEMPNAME}
  fi
}

function deletetempname () {
  if [ ${#TEMPLIST[*]} -gt 0 ]; then
    rm ${TEMPLIST[*]}
  fi
  unset TEMPLIST TEMPNAME_SEQ TEMPNAME
}

#
#--- ファイル定義
# シェル変数命名
#  定義ファイル系    種別_識別[_修飾]
#    例 SQLFILE_CM0051_TEMPLATE
#       TBLBSDEF_CH0051
#  データファイル系  種別_識別
#    例 UNLOAD_CM0051
#  ＰＧパラメタ系    パラメタ名
#    例 SORTOUT
#  引継ぎパラメタ系  処理識別_パラメタ名
#    例 CM0051_SORTOUT
#  ※ 定義ファイル系、データファイル系は先頭に記述し
#     ＰＧパラメタ系、引継ぎパラメタ系は各処理に記述する

#--- 出力ファイル
OUTFILE_CHIFM042=${MID_DIR_CH}/CHIFM042002.csv
OUTFILE_CHIFM042_WRK=${MID_DIR_CH}/${JOBNAME}_CHIFM042002_UNLOADER_WK_1$TAJUKIDO.csv


#--- 0.スケジュール定義CH_M_PRC_SCHDL_TEIGI
UNLOAD_CH0501=${MID_DIR_CH}/${JOBNAME}_CH0501_UNLOADER_WK_1$TAJUKIDO.csv

TBLBSDEF_CH0501=${BSDEF_DIR}/CH_BS_CH0501_001.bsdef
CSVBSDEF_CH0501=${BSDEF_DIR}/CH_BS_IFMCH0501_001.bsdef

#--- 1.請求CH_T_SEIKY
SQLFILE_CH0051_TEMPLATE=${SQL_DIR}/CH_U_CH0051_12.sql

UNLOAD_CH0051=${MID_DIR_CH}/${JOBNAME}_CH_U_CH0051_12_UNLOADER_WK_1$TAJUKIDO.csv

TBLBSDEF_CH0051=${BSDEF_DIR}/CH_BS_CH0051_003.bsdef


#--- 2.請求内訳CH_T_SEIKY_UCWK
SQLFILE_CH0101_TEMPLATE=${SQL_DIR}/CH_U_CH0101_06.sql

UNLOAD_CH0101=${MID_DIR_CH}/${JOBNAME}_CH_U_CH0101_06_UNLOADER_WK_1$TAJUKIDO.csv

TBLBSDEF_CH0101=${BSDEF_DIR}/CH_BS_CH0101_003.bsdef


#--- 3.CH_M_PRC_KMK_CS_CHGE
SQLFILE_CH0401_TEMPLATE=${SQL_DIR}/CH_U_CH0401_04.sql

UNLOAD_CH0401=${MID_DIR_CH}/${JOBNAME}_CH_U_CH0401_04_UNLOADER_WK_1$TAJUKIDO.csv

TBLBSDEF_CH0401=${BSDEF_DIR}/CH_BS_CH0401_003.bsdef


#-- マッチングファイル定義
CMDEF_CHIFM042=${CMDEF_DIR}/CH_CM_0035.def


#
#--- アンロードファイルのクリアを行う
#
cat /dev/null > ${UNLOAD_CH0501}
cat /dev/null > ${UNLOAD_CH0051}
cat /dev/null > ${UNLOAD_CH0101}
cat /dev/null > ${UNLOAD_CH0401}
#
#--- 結果出力ファイルのクリアを行う
#
cat /dev/null > ${OUTFILE_CHIFM042}


#--- スケジュール定義のUNLOAD
UNLOAD=${UNLOAD_CH0501}
TABLE="CH_M_PRC_SCHDL_TEIGI"
sh ${G_TOOLSH}/EOKULD03.sh ${TABLE} ${UNLOAD}


#--- スケジュール定義のSORT/FILTERING
SORTIN=${UNLOAD}
createtempname ${MID_DIR_CH}/${JOBNAME} .csv
SORTOUT=${TEMPNAME}

TBLBSDEF=${TBLBSDEF_CH0501}
CSVBSDEF=${CSVBSDEF_CH0501}
#--- 絞り込み条件
EVENT_CD="05"
time (bsortex \
  -define \
  -a ${TBLBSDEF} \
  -a ${CSVBSDEF} \
  -record recform=txtcsv \
  -input reclen=@{RECLEN} \
         include="@{MK_FLG}asc.eq.'0'.and.@{EVENT_CD}asc.eq.'${EVENT_CD}'.and.@{EVENT_YMD}asc.le.'${RSLT_OPEDATE}'" \
         reconst="@{EVENT_CD},@{EVENT_YMD},@{SEIKY_YM}" \
  -sort key="@[EVENT_CD]asc,@[EVENT_YMD]asc" \
 < ${SORTIN} \
 | bsortex \
  -define \
  -a ${CSVBSDEF} \
  -record recform=txtcsv \
  -input reclen=@[RECLEN] \
  -merge key="@[EVENT_CD]asc" \
  -summary suppress last \
  -output removeeof \
          reconst="@[SEIKY_YM]" \
 > ${SORTOUT} ) 

eval SEIKY_YM=`cat ${SORTOUT}`

#--- CH_T_SEIKY
TEMPLATE=${SQLFILE_CH0051_TEMPLATE}
createtempname ${SQL_DIR}/${JOBNAME} .sql
RESOLVED=${TEMPNAME}
resolveenv ${TEMPLATE} > ${RESOLVED}
# sed -e "s/\:SEIKY_YM/${SEIKY_YM}/" ${TEMPLATE} > ${RESOLVED}


#--- CH_T_SEIKY のUNLOAD
UNLOAD=${UNLOAD_CH0051}
SQLFILE=${RESOLVED}
sh ${G_TOOLSH}/EOKULD03.sh ${SQLFILE} ${UNLOAD}


#--- CH_T_SEIKY のFILTERING
SORTIN=${UNLOAD}
createtempname ${MID_DIR_CH}/${JOBNAME} .csv
SORTOUT=${TEMPNAME}

TBLBSDEF=${TBLBSDEF_CH0051}
#--- 絞り込み条件
SEIKY_STAT="020"
SEIKY_WAY_CD="1"
SHANAIUSE_SKBT_FLG="1"
time (bsortex \
  -define \
  -a ${TBLBSDEF} \
  -record recform=txtcsv \
  -input reclen=@{RECLEN} \
         include="@{MK_FLG}asc.eq.'0'.and.@{SEIKY_STAT}asc.eq.'${SEIKY_STAT}'.and.@{SEIKY_WAY_CD}asc.eq.'${SEIKY_WAY_CD}'.and.@{SHANAIUSE_SKBT_FLG}asc.eq.'${SHANAIUSE_SKBT_FLG}'.and.@{SEIKY_SBT_CD}asc.eq.'0'" \
         reconst="@{SEIKY_NO},@{SEIKY_STAT},@{SEIKY_KEI_NO},@{SEIKY_YM},@{SEIKY_WAY_CD},@{PAY_KIGEN_YMD},@{SHANAIUSE_SKBT_FLG},@{MK_FLG}" \
  -copy \
  -output removeeof \
 < ${SORTIN} \
 > ${SORTOUT} ) 

# 後で使うので退避
CH0051_SORTOUT=${SORTOUT}


#--- CH_T_SEIKY_UCWK のUNLOAD用SQL文の作成
TEMPLATE=${SQLFILE_CH0101_TEMPLATE}
createtempname ${SQL_DIR}/${JOBNAME} .sql
RESOLVED=${TEMPNAME}
resolveenv ${TEMPLATE} > ${RESOLVED}
# sed -e "s/\:SEIKY_YM/${SEIKY_YM}/" ${TEMPLATE} > ${RESOLVED}


#--- CH_T_SEIKY_UCWK のUNLOAD
UNLOAD=${UNLOAD_CH0101}
SQLFILE=${RESOLVED}
sh ${G_TOOLSH}/EOKULD03.sh ${SQLFILE} ${UNLOAD}


#--- CH_T_SEIKY_UCWK のFILTERING
SORTIN=${UNLOAD}
createtempname ${MID_DIR_CH}/${JOBNAME} .csv
SORTOUT=${TEMPNAME}

TBLBSDEF=${TBLBSDEF_CH0101}
time (bsortex \
  -define \
  -a ${TBLBSDEF} \
  -record recform=txtcsv \
  -input reclen=@{RECLEN} \
         include="@{MK_FLG}asc.eq.'0'" \
         reconst="@{SEIKY_NO},@{SEIKY_KEI_NO},@{PRC_GRP_CD},@{PCRS_CD},@{PRC_SVC_CD},@{PRC_KMK_CD},@{USE_STAYMD},@{USE_ENDYMD},@{AMNT},@{MK_FLG},@{DMY}" \
  -copy \
  -output removeeof \
 < ${SORTIN} \
 > ${SORTOUT} ) 

# 後で使うので退避
CH0101_SORTOUT=${SORTOUT}


#--- CH_M_PRC_KMK_CS_CHGE のUNLOAD用SQL文の作成
TEMPLATE=${SQLFILE_CH0401_TEMPLATE}
createtempname ${SQL_DIR}/${JOBNAME} .sql
RESOLVED=${TEMPNAME}
resolveenv ${TEMPLATE} > ${RESOLVED}
# sed -e "s/\:RSLT_OPEDATE/${RSLT_OPEDATE}/g" ${TEMPLATE} > ${RESOLVED}


#--- CH_M_PRC_KMK_CS_CHGE のUNLOAD
UNLOAD=${UNLOAD_CH0401}
SQLFILE=${RESOLVED}
sh ${G_TOOLSH}/EOKULD03.sh ${SQLFILE} ${UNLOAD}


# ZM_M_WORK_PARAM_KNRI での絞り込みは
# UNLOAD時にJOINする事で済んでいるため不要
# SORTIN を SORTOUTの直接引き継ぐ
SORTIN=${UNLOAD}
# SORTOUT=${BSORT_CH0401}
SORTOUT=${SORTIN}

# TBLBSDEF=${TBLBSDEF_CH0401}
##--- 絞り込み条件
## WORK_KINO_SKBT_CD は以下のSQLの実行結果
## select WORK_PARAM_ID, WORK_PARAM_TSTAYMD, WORK_PARAM_TENDYMD, WORK_PARAM_SETTE_VALUE
## from ZM_M_WORK_PARAM_KNRI
## where WORK_PARAM_ID = 'CH_WKS_SNI_NKNDT_SKS';
# SYS_CD="CH"
# WORK_KINO_SKBT_CD="SHANAI_NK"
# CHSHT_CHG_CD="1"
# time (bsortex \
#   -define \
#   -a ${TBLBSDEF} \
#   -record recform=txtcsv \
#   -input reclen=@{RECLEN} \
#          include="@{MK_FLG}asc.eq.'0'.and.@{SYS_CD}asc.eq.'${SYS_CD}'.and.@{WORK_KINO_SKBT_CD}asc.eq.'${WORK_KINO_SKBT_CD}'.and.@{CHSHT_CHG_CD}asc.eq.'${CHSHT_CHG_CD}'.and.@{PRC_KMK_CS_CHGE_TSTAYMD}asc.le.'${RSLT_OPEDATE}'.and.@{PRC_KMK_CS_CHGE_TENDYMD}asc.ge.'${RSLT_OPEDATE}'" \
#          reconst="@{SYS_CD},@{WORK_KINO_SKBT_CD},@{CHSHT_CHG_CD},@{PRC_GRP_CD},@{PCRS_CD},@{PRC_SVC_CD},@{PRC_KMK_CD},@{PRC_KMK_CS_CHGE_TSTAYMD},@{PRC_KMK_CS_CHGE_TENDYMD},@{MK_FLG}" \
#   -copy \
#   -output removeeof \
#  < ${SORTIN} \
#  > ${SORTOUT} ) 

# 後で使うので退避
CH0401_SORTOUT=${SORTOUT}


#--- MATCHING
export ZTL_DEFINE_CH0051=SEIKY_NO,SEIKY_STAT,SEIKY_KEI_NO,SEIKY_YM,SEIKY_WAY_CD,PAY_KIGEN_YMD,SHANAIUSE_SKBT_FLG,MK_FLG
export ZTL_DEFINE_CH0101=SEIKY_NO,SEIKY_KEI_NO,PRC_GRP_CD,PCRS_CD,PRC_SVC_CD,PRC_KMK_CD,USE_STAYMD,USE_ENDYMD,AMNT,MK_FLG,DMY
export ZTL_DEFINE_CH0401=SYS_CD,WORK_KINO_SKBT_CD,CHSHT_CHG_CD,PRC_GRP_CD,PCRS_CD,PRC_SVC_CD,PRC_KMK_CD,PRC_KMK_CS_CHGE_TSTAYMD,PRC_KMK_CS_CHGE_TENDYMD,MK_FLG
export CH_T_SEIKY=${CH0051_SORTOUT}
export CH_T_SEIKY_UCWK=${CH0101_SORTOUT}
export CH_M_PRC_KMK_CS_CHGE=${CH0401_SORTOUT}
export ZTLOUTFILE=${OUTFILE_CHIFM042}

CMFILE=${CMDEF_CHIFM042}
${G_TOOLSH}/util/bin/ZTLMAT01 ${CMFILE}

#--- 改行コードをwindows (CRLF)に変換する
nkf -Lw -s < ${OUTFILE_CHIFM042} > ${OUTFILE_CHIFM042_WRK}
rc=$?
if [ $rc -ne 0 ]
then
    sh ${G_TOOLSH}/EOK010210J0.sh CS00002E $JOBNAME " sed or nkf Error($SVC sed or nkf:rc=$rc) "
    echo $JOBNAME " sed or nkf Error($SVC sed or nkf:rc=$rc) "
    exit ${G_RTN_ERROR}
fi
cp -f ${OUTFILE_CHIFM042_WRK} ${OUTFILE_CHIFM042}
rm -f ${OUTFILE_CHIFM042_WRK}

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

# 中間ファイルを削除する
#createtempname
if [ $WK_RM = "true" ]
then
    deletetempname
    rm -f ${OUTFILE_CHIFM042_WRK}
    rm -f ${UNLOAD_CH0501}
    rm -f ${UNLOAD_CH0051}
    rm -f ${UNLOAD_CH0101}
    rm -f ${UNLOAD_CH0401}
fi

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

exit $exit_rc


