/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKSikyKeiInfSks
*	ソースファイル名	：JBSbatKKSikyKeiInfSks.java
*	作成者				：富士通　
*	作成日				：2011年06月24日
*＜機能概要＞
*　請求契約情報作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/06/24   富士通		新規作成
*	v3.00.00	2012/12/13	FJ)上田		ST4-2012-0000175
*   v20.00.00   2015/11/04  FJ)山裾    【ANK-2565-00-00】「クレジットカード番号預りＩＤ」「仕向先会社コード」を追加
*   v37.00.00   2018/04/02  FJ)酒井     ANK-3366-00-00
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.util.file.JBSbatCHIFI001;
import eo.business.util.file.JBSbatKKIFM283;
import eo.business.util.table.JBSbatCH_M_PRC_SCHDL_TEIGI;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKSikyKeiInfSks extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	
	/** テーブル(料金スケジュール定義)*/
	private static final String D_TBL_NAME_CH_M_PRC_SCHDL_TEIGI = "CH_M_PRC_SCHDL_TEIGI";
	
	/** テーブルアクセスクラス(料金スケジュール定義)*/
	private JBSbatSQLAccess db_CH_M_PRC_SCHDL_TEIGI = null;
	
	/** SQL定義キー(KK_SELECT_016)*/
	private static final String CH_M_PRC_SCHDL_TEIGI_KK_SELECT_016 = "KK_SELECT_016";
	
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 運用日付 */
	private String unyoDate = null;
	
	/** 前月末基準適用フラグ */
	private boolean aplyZenMonFlg = false;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		// テーブルアクセスクラス
		db_CH_M_PRC_SCHDL_TEIGI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_SCHDL_TEIGI);
		
		// 運用日
		unyoDate = commonItem.getOpeDate();
		
		// 月初〜料金計算日に該当する運用日の場合には処理運用日を月末に変換
		setShoriMonth();
		
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		/// 処理形式：単一加工／増幅★（入力：ファイル１、出力：なし） ///
		super.logPrint.printDebugLog("execute start");
		super.logPrint.printDebugLog(inMap.getString(JBSbatKKIFM283.SEIKY_KEI_NO));
		// 出力情報保持部品
		JBSbatOutputItem outItem = new JBSbatOutputItem();
		
		// 請求契約インターフェイスファイル
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// 出力内容の編集(請求契約インターフェイスファイル)
		outMap = editMap(inMap);
		// 出力フラグON
		outMap.setOutFlg(true);
		// 出力データを格納
		outItem.addOutMapList(outMap);
		
		// 入力ＤＢのレコードをログ出力する
		//super.logPrint.printDebugLog(JCMLogMasking.maskingMap(outMap.getMap(), "KK_T_SEIKY_KEI-KK_SELECT_005"));
		super.logPrint.printDebugLog("execute end");
		
		return outItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 処理月設定
	 * 料金スケジュール定義マスタから、バッチ運用月内の料金計算日を取得。
	 * バッチ運用日 <= 料金計算日：扱う年月日(月初・月末)を前月基準とする
	 * バッチ運用日 >  料金計算日：扱う年月日(月初・月末)を当月基準とする
	 * 
	 * @throws Exception
	 */
	public void setShoriMonth() throws Exception
	{
		// 運用月内の料金計算日
		String strPrcCalMon = null;
		
		// 抽出結果取得用
		JBSbatCommonDBInterface map = new JBSbatCommonDBInterface();
		
		//【料金スケジュール定義】から運用月内の料金計算日を取得
		String param[] = {unyoDate.substring(0, 6) + "%"};
		executeCH_M_PRC_SCHDL_TEIGI_KK_SELECT_016(param);
		map = db_CH_M_PRC_SCHDL_TEIGI.selectNext();
		
		if(map != null)
		{
			strPrcCalMon = map.getString(JBSbatCH_M_PRC_SCHDL_TEIGI.EVENT_YMD);
		}
		// バッチ運用日 <= 料金計算日の場合、前月末基準適用フラグをONに設定
		if(unyoDate.compareTo(strPrcCalMon) <= 0)
		{
			aplyZenMonFlg = true;
		}
	}

	/**
	 * SQLKEY(KK_SELECT_016)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		@param:順にバイント変数の値を@param配列に入れます。バイント変数は以下に説明します。
	 *		 	請求年月
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_M_PRC_SCHDL_TEIGI_KK_SELECT_016(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		
		// DBアクセスを実行します
		db_CH_M_PRC_SCHDL_TEIGI.selectBySqlDefine(paramList, CH_M_PRC_SCHDL_TEIGI_KK_SELECT_016);
	}

	/**
	 * <dd>メソッド名	：ファイル編集
	 * <dd>メソッド説明	：1.ファイル編集対象項目を取得します。
	 *                    2.取得した項目を元にファイル編集を行います。
	 * @param  inMap     データ取得情報Map
	 * @return outMap    出力Map
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap editMap(JBSbatServiceInterfaceMap inMap) throws Exception 
	{
		// 出力情報を設定するMap
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		super.logPrint.printDebugLog(inMap.getString(JBSbatKKIFM283.SEIKY_KEI_NO));
		// 請求契約番号
		outMap.setString(JBSbatCHIFI001.SEIKY_KEI_NO, inMap.getString(JBSbatKKIFM283.SEIKY_KEI_NO));

		// 請求契約ステータス
		outMap.setString(JBSbatCHIFI001.SKHK_SVKEI_STAT_CD, inMap.getString(JBSbatKKIFM283.SKHK_SVKEI_STAT_CD));

		// ＳＹＳＩＤ(ANK-0020-00-00：請求単独登録の場合には、採番対象外)
		outMap.setString(JBSbatCHIFI001.SYSID, inMap.getString(JBSbatKKIFM283.SYSID));

		// マンションオーナーＩＤ
		outMap.setString(JBSbatCHIFI001.MANSION_OWNR_ID, inMap.getString(JBSbatKKIFM283.MANSION_OWNR_ID));

		// 請求方法コード
		outMap.setString(JBSbatCHIFI001.SEIKY_WAY_CD, inMap.getString(JBSbatKKIFM283.SEIKY_WAY_CD));

		// 次回請求方法コード
		outMap.setString(JBSbatCHIFI001.NEXT_SEIKY_WAY_DIV, inMap.getString(JBSbatKKIFM283.NEXT_SEIKY_WAY_DIV));

		// 請求契約解約理由コード
		outMap.setString(JBSbatCHIFI001.SKHK_SVKEI_DLRE_SKBT_CD, inMap.getString(JBSbatKKIFM283.SKHK_SVKEI_DLRE_SKBT_CD));

		// 請求サイクルコード
		outMap.setString(JBSbatCHIFI001.SEIKY_CYCLE_CD, inMap.getString(JBSbatKKIFM283.SEIKY_CYCLE_CD));

		// 群コード(項目未実装)
		//outMap.setString(JBSbatCHIFI001.GUN_CD, inMap.getString(JBSbatKKIFM283.GUN_CD));

		// 運用日が月初〜料金計算日に該当する場合には、前月末時点の請求書発行要否の情報を適用
		if(aplyZenMonFlg)
		{
			// 請求書発行要否 前月末日の請求書発行要否を優先する。
			if(null == inMap.getString(JBSbatKKIFM283.ZNGTU_SEIKYUS_HAKKO_YH) || "".equals(inMap.getString(JBSbatKKIFM283.ZNGTU_SEIKYUS_HAKKO_YH).trim()))
			{
				outMap.setString(JBSbatCHIFI001.SEIKYUS_HAKKO_YH, inMap.getString(JBSbatKKIFM283.SEIKYUS_HAKKO_YH));
			}
			else
			{
				outMap.setString(JBSbatCHIFI001.SEIKYUS_HAKKO_YH, inMap.getString(JBSbatKKIFM283.ZNGTU_SEIKYUS_HAKKO_YH));
			}
		}
		else
		{
			outMap.setString(JBSbatCHIFI001.SEIKYUS_HAKKO_YH, inMap.getString(JBSbatKKIFM283.SEIKYUS_HAKKO_YH));
		}

		// 送付先法人格種別コード
		outMap.setString(JBSbatCHIFI001.SHS_HOJIN_SBT_CD, inMap.getString(JBSbatKKIFM283.SHS_HOJIN_SBT_CD));

		// 送付先法人格前後指定コード
		outMap.setString(JBSbatCHIFI001.SHS_HOJIN_ZENGO_SHITEI_CD, inMap.getString(JBSbatKKIFM283.SHS_HOJIN_ZENGO_SHITEI_CD));

		// 送付先カナ名
		outMap.setString(JBSbatCHIFI001.SHS_KANA, inMap.getString(JBSbatKKIFM283.SHS_KANA));

		// 送付先名
		outMap.setString(JBSbatCHIFI001.SOHUS_NM, inMap.getString(JBSbatKKIFM283.SOHUS_NM));

		// 送付先部課名
		outMap.setString(JBSbatCHIFI001.SOHUS_BKM, inMap.getString(JBSbatKKIFM283.SOHUS_BKM));

		// 送付先担当者名
		outMap.setString(JBSbatCHIFI001.SOHUS_TNTSHA_NM, inMap.getString(JBSbatKKIFM283.SOHUS_TNTSHA_NM));

		// 送付先住所コード
		outMap.setString(JBSbatCHIFI001.SOHUS_AD_CD, inMap.getString(JBSbatKKIFM283.SOHUS_AD_CD));

		// 送付先郵便番号
		outMap.setString(JBSbatCHIFI001.SOHUS_PCD, inMap.getString(JBSbatKKIFM283.SOHUS_PCD));

		// 送付先都道府県名
		outMap.setString(JBSbatCHIFI001.SOHUS_STATE_NM, inMap.getString(JBSbatKKIFM283.SOHUS_STATE_NM));

		// 送付先市区町村名
		outMap.setString(JBSbatCHIFI001.SOHUS_CITY_NM, inMap.getString(JBSbatKKIFM283.SOHUS_CITY_NM));

		// 送付先大字通称名
		outMap.setString(JBSbatCHIFI001.SOHUS_OAZTSU_NM, inMap.getString(JBSbatKKIFM283.SOHUS_OAZTSU_NM));

		// 送付先字丁目名
		outMap.setString(JBSbatCHIFI001.SOHUS_AZCHO_NM, inMap.getString(JBSbatKKIFM283.SOHUS_AZCHO_NM));

		// 送付先住所補記・建物名
		outMap.setString(JBSbatCHIFI001.SOHUS_ADRTTM, inMap.getString(JBSbatKKIFM283.SOHUS_ADRTTM));

		// 送付先住所補記・部屋番号
		outMap.setString(JBSbatCHIFI001.SOHUS_ADRRM, inMap.getString(JBSbatKKIFM283.SOHUS_ADRRM));

		// 送付先番地号
		outMap.setString(JBSbatCHIFI001.SOHUS_BNCHIGO, inMap.getString(JBSbatKKIFM283.SOHUS_BNCHIGO));

		// 送付先電話番号
		outMap.setString(JBSbatCHIFI001.SOHUS_TELNO, inMap.getString(JBSbatKKIFM283.SOHUS_TELNO));

		// 送付先ＦＡＸ番号
		outMap.setString(JBSbatCHIFI001.SOHUS_FAX_NO, inMap.getString(JBSbatKKIFM283.SOHUS_FAX_NO));

		// 送付先メールアドレス
		outMap.setString(JBSbatCHIFI001.SOHUS_MLAD, inMap.getString(JBSbatKKIFM283.SOHUS_MLAD));

		// 強制窓口フラグ
		outMap.setString(JBSbatCHIFI001.KYOSEI_MADOGUCHI_FLG, inMap.getString(JBSbatKKIFM283.KYOSEI_MADOGUCHI_FLG));

		// 異動区分
		outMap.setString(JBSbatCHIFI001.IDO_DIV, inMap.getString(JBSbatKKIFM283.IDO_DIV));

		// 適用年月日
//		outMap.setString(JBSbatCHIFI001.RSV_APLY_YMD, inMap.getString(JBSbatKKIFM283.RSV_APLY_YMD));
		outMap.setString(JBSbatCHIFI001.UPD_UNYO_YMD, inMap.getString(JBSbatKKIFM283.UPD_UNYO_YMD));

		// 利用契約者区分(ANK-0020-00-00：請求単独登録の場合(抽出不可)には社用外を設定)
		if(JBSbatKKConst.KEISHA_TYPE_CD_JISHA.equals(inMap.getString(JBSbatKKIFM283.KEISHA_TYPE_CD)))
		{
			outMap.setString(JBSbatCHIFI001.USE_KSH_DIV, JBSbatKKConst.USE_KSH_DIV_SHAYO);
		}
		else
		{
			outMap.setString(JBSbatCHIFI001.USE_KSH_DIV, JBSbatKKConst.USE_KSH_DIV_SHAYOGAI);
		}

		// 内販外販コード(ANK-0020-00-00：請求単独登録の場合(抽出不可)には外販を設定)
		if(null != inMap.getString(JBSbatKKIFM283.NAIHAN_GAIHAN_CD) && 0 != inMap.getString(JBSbatKKIFM283.NAIHAN_GAIHAN_CD).length())
		{
			outMap.setString(JBSbatCHIFI001.NAIHAN_GAIHAN_CD, inMap.getString(JBSbatKKIFM283.NAIHAN_GAIHAN_CD));
		}
		else
		{
			outMap.setString(JBSbatCHIFI001.NAIHAN_GAIHAN_CD, JBSbatKKConst.GAIHAN);
		}

		// 口座ステータス
		outMap.setString(JBSbatCHIFI001.KOZA_STAT, inMap.getString(JBSbatKKIFM283.KOZA_STAT));

		// 金融機関コード
		outMap.setString(JBSbatCHIFI001.BANK_CD, inMap.getString(JBSbatKKIFM283.BANK_CD));

		// 金融機関支店コード
		outMap.setString(JBSbatCHIFI001.BANK_SHITEN_CD, inMap.getString(JBSbatKKIFM283.BANK_SHITEN_CD));

		// 預金種目コード
		outMap.setString(JBSbatCHIFI001.YOKIN_SHUMOKU_CD, inMap.getString(JBSbatKKIFM283.YOKIN_SHUMOKU_CD));

		// 口座番号
		outMap.setString(JBSbatCHIFI001.KOZA_NO, inMap.getString(JBSbatKKIFM283.KOZA_NO));

		// 新規コード
		outMap.setString(JBSbatCHIFI001.NEW_CD, inMap.getString(JBSbatKKIFM283.NEW_CD));

		// 口座名義人漢字
		outMap.setString(JBSbatCHIFI001.KOZA_MEIGIN_KANJI, inMap.getString(JBSbatKKIFM283.KOZA_MEIGIN_KANJI));

		// 口座名義人カナ名
		outMap.setString(JBSbatCHIFI001.KOZA_MEIGIN_KANA, inMap.getString(JBSbatKKIFM283.KOZA_MEIGIN_KANA));

		// 通帳記号
		outMap.setString(JBSbatCHIFI001.TSUCHO_SYMBOL, inMap.getString(JBSbatKKIFM283.TSUCHO_SYMBOL));

		// 通帳番号
		outMap.setString(JBSbatCHIFI001.TSUCHO_NO, inMap.getString(JBSbatKKIFM283.TSUCHO_NO));

		// クレジットカードステータス
		outMap.setString(JBSbatCHIFI001.CRECARD_STAT, inMap.getString(JBSbatKKIFM283.CRECARD_STAT));

		// クレジットカード事業コード
		outMap.setString(JBSbatCHIFI001.CRECARD_JIGYO_CD, inMap.getString(JBSbatKKIFM283.CRECARD_JIGYO_CD));

		// クレジットカード会社コード
		outMap.setString(JBSbatCHIFI001.CRECARD_COMP_CD, inMap.getString(JBSbatKKIFM283.CRECARD_COMP_CD));

		// クレジットカード番号
		outMap.setString(JBSbatCHIFI001.CRECARD_NO, inMap.getString(JBSbatKKIFM283.CRECARD_NO));

		// クレジットカード有効期限
		outMap.setString(JBSbatCHIFI001.CRECARD_YK_KIGEN, inMap.getString(JBSbatKKIFM283.CRECARD_YK_KIGEN));

		// クレジット交換コード
		outMap.setString(JBSbatCHIFI001.CREDIT_KOKAN_CD, inMap.getString(JBSbatKKIFM283.CREDIT_KOKAN_CD));

		// クレジットカード名義ローマ字
		outMap.setString(JBSbatCHIFI001.CRECARD_NM_ROMAJI, inMap.getString(JBSbatKKIFM283.CRECARD_NM_ROMAJI));

		// クレジットカード名義カナ名
		outMap.setString(JBSbatCHIFI001.CRECARD_NM_KANA, inMap.getString(JBSbatKKIFM283.CRECARD_NM_KANA));

		// クレジットカード無効年月
		outMap.setString(JBSbatCHIFI001.CRECA_MK_YM, inMap.getString(JBSbatKKIFM283.CRECA_MK_YM));

		// 請求方法適用調整年月日
		outMap.setString(JBSbatCHIFI001.SEIKY_WAY_APLY_ADJ_YMD, inMap.getString(JBSbatKKIFM283.SEIKY_WAY_APLY_ADJ_YMD));
		
		// 2015/11/04 ANK-2565-00-00 Add Start //
		// クレジットカード番号預りＩＤ
		outMap.setString(JBSbatCHIFI001.CRECARD_NO_AZKRI_ID, inMap.getString(JBSbatKKIFM283.CRECARD_NO_AZKRI_ID));
		
		// 仕向先会社コード
		outMap.setString(JBSbatCHIFI001.SHIKOSAKI_COMP_CD, inMap.getString(JBSbatKKIFM283.SHIKOSAKI_COMP_CD));
		// 2015/11/04 ANK-2565-00-00 Add End //
		
// 2018/04/03 ANK-3366-00-00 ADD STA
		// 卸先事業者コード
		outMap.setString(JBSbatCHIFI001.ORSJGS_CD, inMap.getString(JBSbatKKIFM283.ORSJGS_CD));		
// 2018/04/03 ANK-3366-00-00 ADD END
		return outMap ;
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		
		// DBアクセスクラスをクローズします
		db_CH_M_PRC_SCHDL_TEIGI.close();
		
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
