/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKChoKeiWriHagMk
*	ソースファイル名	：JBSbatKKChoKeiWriHagMk.java
*	作成者				：富士通　
*	作成日				：2012年06月08日
*＜機能概要＞
*　長期継続利用割引事前通知ハガキ情報作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00		2012/06/08   富士通		新規作成
*	v4.01		2013/02/08  FJ)砂川		【ST3-2013-0000314】請求所送付先住所情報を、請求スキーマではなく請求契約から取得する対応
* 	v4.02		2013/02/10	FJ)泉		【TAI-2012-0000143】バッチ異常終了時のログのメッセージ修正
* 	v8.00		2014/02/19	FJ)山裾		【ANK-1876-00-00】長割メールの送信方法をメールプラットフォームから送信するように修正
*********************************************************************/
package eo.business.service;

import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKKBatCommon;
import eo.business.util.file.JBSbatKKIFM211;
import eo.business.util.file.JBSbatKKIFM214;
import eo.business.util.table.JBSbatCC_M_MAIL;
import eo.business.util.table.JBSbatCK_T_CUST;
import eo.business.util.table.JBSbatKK_T_SEIKY_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVKEI_KAISEN_UW;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessException;
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 JBSbatKKChoKeiWriHagMk extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(回線対象サービス契約)*/
	private static final String D_TBL_NAME_KK_T_KAISEN_TG_SVKEI = "KK_T_KAISEN_TG_SVKEI";

	/** テーブル(メール)*/
	private static final String D_TBL_NAME_CC_M_MAIL = "CC_M_MAIL";

	/** SQL定義キー(KK_SELECT_019)*/
	private static final String KK_T_KAISEN_TG_SVKEI_KK_SELECT_019 = "KK_SELECT_019";

	/** SQL定義キー(KK_SELECT_003)*/
	private static final String CC_M_MAIL_KK_SELECT_003 = "KK_SELECT_003";

	/** テーブルアクセスクラス(回線対象サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KAISEN_TG_SVKEI = null;

	/** テーブルアクセスクラス(メール)*/
	private JBSbatSQLAccess db_CC_M_MAIL = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 処理日と運用日が相違時の運用日 .*/
	private String mRerunOpedate = null;
	/** メールコード：通知パターンA .*/
	private static final String MAIL_PT_A = "KKM1000004";
	/** メールコード：通知パターンB .*/
	private static final String MAIL_PT_B = "KKM1000005";
	/** メールコード：通知パターンC .*/
	private static final String MAIL_PT_C = "KKM1000006";
	
	// 2014/02/19 ANK-1876-00-00 Add Start
	/** メールコード：通知パターンD .*/
	private static final String MAIL_PT_D = "KKM1000009";
	// 2013/02/19 ANK-1876-00-00 Add End
	
//	///////////////////////////////////////////
//	/// メール本文の変更があればここを変更する
//	///  ・置換用文字配列から呼び出す順番が入っている
//	///////////////////////////////////////////
	/** 置換用添え字 業務パラメータ .*/
	private static final String[] SOE_W =
	{ "null", "1", "2", "3", "4", "5", "6", "7", "8", "9", 
			"A", "B", "C", "D", "E", "F", "G"
	};
	
	/** 業務パラメータ取得キー1 .*/
	private static final String WK_KEY_01 = "KK_41902_DATA_01";
	/** 業務パラメータ取得キー2 .*/
	private static final String WK_KEY_02 = "KK_41902_DATA_02";
	/** 業務パラメータ取得キー3 .*/
	private static final String WK_KEY_03 = "KK_41902_DATA_03";
	
	/** 業務パラメータ文字列 .*/
	private String mWorkParam = null;
	/** メールタイトル配列 .*/
	private HashMap<String, String> mailTitles = null;
	/** 単項目チェック用変数 .*/
	private HashMap<String, String>mValueMap = null;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_KAISEN_TG_SVKEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KAISEN_TG_SVKEI);
		db_CC_M_MAIL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CC_M_MAIL);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// Free項目からリラン時の運用日取得を試みる
		if(super.freeItem != null && !super.freeItem.equals(""))
		{
			// 日付フォーマット確認
			if(JKKBatCommon.isYearMonthDay1(super.freeItem))
			{
				// リラン用運用日変数に格納
				this.mRerunOpedate = super.freeItem;
			}
			else
			{
				// 日付が不正
				String[] msgParam = new String[] { "運用日(yyyyMMdd)：" + super.freeItem };
				throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0090TE, msgParam);
			}
		}
		else
		{
			// 運用日と処理日を同じにする。
			this.mRerunOpedate = super.opeDate;
		}
		// 業務パラメータ管理テーブルから必要な文字列を取得する
		StringBuffer buff = new StringBuffer();
		buff.append(JKKBatCommon.getWorkParamSetteValue(super.commonItem, WK_KEY_01));
		buff.append(JKKBatCommon.getWorkParamSetteValue(super.commonItem, WK_KEY_02));
		buff.append(JKKBatCommon.getWorkParamSetteValue(super.commonItem, WK_KEY_03));
		this.mWorkParam = buff.toString();
		
		// メールテーブルからメールコードに対応したメールを取得して保持
		// メールコードに対応したメールタイトルを取得保持
		Object[] param = new Object[2];
//		this.mMailRecs = new HashMap<String, JBSbatCommonDBInterface>();
		this.mailTitles = new HashMap<String, String>();
		JBSbatCommonDBInterface rec = null;

		// 2014/02/19 ANK-1876-00-00 Mod Start
//		String[] keys = { MAIL_PT_A, MAIL_PT_B, MAIL_PT_C };
		String[] keys = { MAIL_PT_A, MAIL_PT_B, MAIL_PT_C, MAIL_PT_D  };
		// 2014/02/19 ANK-1876-00-00 Mod Start

		for(String key : keys)
		{
			param[0] = key;
			param[1] = this.mRerunOpedate;
			executeCC_M_MAIL_KK_SELECT_003(param);
			rec = db_CC_M_MAIL.selectNext();
			if(rec == null)
			{
				// レコードが存在しない
				String[] msgParam = new String[] { "メール", "メールコード：" + key };
				throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0210CE, msgParam);
			}
//			this.mMailRecs.put(key, rec);
			this.mailTitles.put(key, rec.getString(JBSbatCC_M_MAIL.MAIL_TITLE));
			
		}
		
		// 単項目用エラーマップを準備
		this.mValueMap = this.getItemvalueMap();
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// 単項目チェック
		if(!this.isSingleCheckKKIFM211_INF1(inMap.getMap(), this.mValueMap))
		{
			// 入力ファイルが不正
			String[] msgParam = new String[] { "サービス契約番号：" + inMap.getString(JBSbatKKIFM211.SVC_KEI_NO) };
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0090TE, msgParam);
		}
		
		// サービス契約番号を取得
		String svcKeiNo = inMap.getString(JBSbatKKIFM211.SVC_KEI_NO);
		// 入力レコードを用いてテーブルから住所等抽出する
		Object[] param = { this.mRerunOpedate, super.opeDate, svcKeiNo, super.opeDate };
		// SQL発行
		this.executeKK_T_KAISEN_TG_SVKEI_KK_SELECT_019(param);
		JBSbatCommonDBInterface result = db_KK_T_KAISEN_TG_SVKEI.selectNext();
		if(result == null)
		{
			// TAI-2012-0000143 2013/02/10 MOD START
			// レコードが存在しない
//			String[] msgParam = new String[] { "ハガキ送付用住所データ" };
			String[] msgParam = new String[] { "ハガキ送付用住所データ(リラン運用日:" + mRerunOpedate + "、サービス契約番号:" + svcKeiNo + ")"};
			// TAI-2012-0000143 2013/02/10 MOD END
			
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0290AW, msgParam);
		}
		// 業務パラメータ、メール文章結合(%文字を置換して返す)
		String hagaki_msg = this.executeReplace(inMap, result);
		
		// =====================================
		// 出力共通電文を作成
		// =====================================
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		// 入出力インターフェースオブジェクト作成
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		// ===========================
		// ハガキ送付情報ファイル作成
		// ===========================
		// サービス契約番号
		outMap.setString(JBSbatKKIFM214.SVC_KEI_NO, svcKeiNo);
		// 契約者番号
		outMap.setString(JBSbatKKIFM214.SYSID, result.getString(JBSbatKK_T_SVC_KEI.SYSID));
		// 請求書番号
		// ▼▼▼ ST3-2013-0000314 Delete Start ▼▼▼
//		outMap.setString(JBSbatKKIFM214.SEIKY_NO, result.getString(JBSbatCH_T_SEIKY.SEIKY_NO));
		// ▲▲▲ ST3-2013-0000314 Delete End   ▲▲▲
		// ▼▼▼ ST3-2013-0000314 Add Start    ▼▼▼
		outMap.setString(JBSbatKKIFM214.SEIKY_NO, result.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_NO));
		// ▲▲▲ ST3-2013-0000314 Add End      ▲▲▲
		// 契約者氏名
		outMap.setString(JBSbatKKIFM214.CUST_NM, result.getString(JBSbatCK_T_CUST.CUST_NM));
		// 契約者郵便場号
		outMap.setString(JBSbatKKIFM214.KEISHA_PCD, result.getString(JBSbatCK_T_CUST.KEISHA_PCD));
		// 契約者住所
		outMap.setString(JBSbatKKIFM214.KEISHA_ADD_ALL, result.getString(JBSbatKKIFM214.KEISHA_ADD_ALL));
		// 請求書送付先氏名
		// ▼▼▼ ST3-2013-0000314 Delete Start ▼▼▼
//		outMap.setString(JBSbatKKIFM214.SOHUS_NM, result.getString(JBSbatCH_T_SEIKY.SOHUS_NM));
		// ▲▲▲ ST3-2013-0000314 Delete End   ▲▲▲
		// ▼▼▼ ST3-2013-0000314 Add Start    ▼▼▼
		outMap.setString(JBSbatKKIFM214.SOHUS_NM, result.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_NM));
		// ▲▲▲ ST3-2013-0000314 Add End      ▲▲▲
		// 請求書送付先郵便番号
		// ▼▼▼ ST3-2013-0000314 Delete Start ▼▼▼
//		outMap.setString(JBSbatKKIFM214.SOHUS_PCD, result.getString(JBSbatCH_T_SEIKY.SOHUS_PCD));
		// ▲▲▲ ST3-2013-0000314 Delete End   ▲▲▲
		// ▼▼▼ ST3-2013-0000314 Add Start    ▼▼▼
		outMap.setString(JBSbatKKIFM214.SOHUS_PCD, result.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_PCD));
		// ▲▲▲ ST3-2013-0000314 Add End      ▲▲▲
		// 請求書送付先住所
		outMap.setString(JBSbatKKIFM214.SOHUS_ADD_ALL, result.getString(JBSbatKKIFM214.SOHUS_ADD_ALL));
		// 利用場所郵便番号
		outMap.setString(JBSbatKKIFM214.KAISEN_PLACE_PCD, result.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_PCD));
		// 利用場所住所
		outMap.setString(JBSbatKKIFM214.KAISEN_ADD_ALL, result.getString(JBSbatKKIFM214.KAISEN_ADD_ALL));
		// 本文メッセージ
		outMap.setString(JBSbatKKIFM214.ML_MSG, hagaki_msg);
		
		// 出力共通電文ファイル１に入出力インターフェースをセット
		outputBean.addOutMapList(outMap);
		// 出力フラグをセット
		outMap.setOutFlg(true);
		// 出力共通電文を返す
		return outputBean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_KAISEN_TG_SVKEI.close();
		db_CC_M_MAIL.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 *入力情報（ハガキ用長期継続利用割引事前通知情報）の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 TXT-KKIFM211-INF1.SVC_KEI_NO			ハガキ用長期継続利用割引事前通知情報.サービス契約番号
	 *			 TXT-KKIFM211-INF1.CUST_NM			ハガキ用長期継続利用割引事前通知情報.契約者氏名
	 *			 TXT-KKIFM211-INF1.CD_DIV_NM			ハガキ用長期継続利用割引事前通知情報.サービス契約ステータス
	 *			 TXT-KKIFM211-INF1.OPD_YMD			ハガキ用長期継続利用割引事前通知情報.運用日
	 *			 TXT-KKIFM211-INF1.SVC_STA_YMD			ハガキ用長期継続利用割引事前通知情報.サービス開始年月日
	 *			 TXT-KKIFM211-INF1.WRI_STAT_YMD			ハガキ用長期継続利用割引事前通知情報.割引適用開始年月日
	 *			 TXT-KKIFM211-INF1.WRI_END_YMD			ハガキ用長期継続利用割引事前通知情報.割引適用終了年月日
	 *			 TXT-KKIFM211-INF1.WRI_TRN			ハガキ用長期継続利用割引事前通知情報.長期継続利用割引区分
	 *			 TXT-KKIFM211-INF1.MAIL_CD			ハガキ用長期継続利用割引事前通知情報.メールコード
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	@SuppressWarnings("unchecked")
	private boolean isSingleCheckKKIFM211_INF1(HashMap rsMap, HashMap itemvalueMap)
	{
		// 単項目チェックを行います
		String strValue = null;

		// サービス契約番号項目チェック
		strValue = (String)rsMap.get("SVC_KEI_NO");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM211-INF1.SVC_KEI_NO")});
			return false;
		}

		// 契約者氏名項目チェック
		strValue = (String)rsMap.get("CUST_NM");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM211-INF1.CUST_NM")});
			return false;
		}

		// サービス契約ステータス項目チェック
		strValue = (String)rsMap.get("CD_DIV_NM");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM211-INF1.CD_DIV_NM")});
			return false;
		}

		// 運用日項目チェック
		strValue = (String)rsMap.get("OPD_YMD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM211-INF1.OPD_YMD")});
			return false;
		}

		// サービス開始年月日項目チェック
		strValue = (String)rsMap.get("SVC_STA_YMD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM211-INF1.SVC_STA_YMD")});
			return false;
		}

		// 割引適用開始年月日項目チェック
		strValue = (String)rsMap.get("WRI_STAT_YMD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM211-INF1.WRI_STAT_YMD")});
			return false;
		}

		// 割引適用終了年月日項目チェック
		strValue = (String)rsMap.get("WRI_END_YMD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM211-INF1.WRI_END_YMD")});
			return false;
		}

		// 長期継続利用割引区分項目チェック
		strValue = (String)rsMap.get("WRI_TRN");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM211-INF1.WRI_TRN")});
			return false;
		}

		// メールコード項目チェック
		strValue = (String)rsMap.get("MAIL_CD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM211-INF1.MAIL_CD")});
			return false;
		}

		return true;
	}

	/**
	 * SQLKEY(KK_SELECT_019)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	運用日
	 *		 	処理日
	 *		 	サービス契約番号
	 *		 	処理日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_KAISEN_TG_SVKEI_KK_SELECT_019(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_KK_T_KAISEN_TG_SVKEI.selectBySqlDefine(paramList, KK_T_KAISEN_TG_SVKEI_KK_SELECT_019);
	}

	/**
	 * SQLKEY(KK_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	メールコード
	 *		 	運用日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCC_M_MAIL_KK_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CC_M_MAIL.selectBySqlDefine(paramList, CC_M_MAIL_KK_SELECT_003);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * エラーメッセージに関する項目値を格納されたHashMap<String, String>を生成します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.エラーメッセージに関する項目値を格納されたHashMapを生成する。<br>
	 * 2.エラーメッセージに関する項目値を格納されたHashMapに値を設定する。<br>
	 * </pre>
	 * <p>
	 * @return itemvalueMap エラーメッセージに関する項目値を格納されたHashMap
	 */
	private HashMap<String, String> getItemvalueMap()
	{
		// エラーメッセージに関する項目値が格納されたHashMapを設定
		HashMap<String, String> itemvalueMap = new HashMap<String, String>();
		itemvalueMap.put("TXT-KKIFM211-INF1.SVC_KEI_NO",	"ハガキ用長期継続利用割引事前通知情報.サービス契約番号");
		itemvalueMap.put("TXT-KKIFM211-INF1.CUST_NM", 		"ハガキ用長期継続利用割引事前通知情報.契約者氏名");
		itemvalueMap.put("TXT-KKIFM211-INF1.CD_DIV_NM", 	"ハガキ用長期継続利用割引事前通知情報.サービス契約ステータス");
		itemvalueMap.put("TXT-KKIFM211-INF1.OPD_YMD",		"ハガキ用長期継続利用割引事前通知情報.運用日");
		itemvalueMap.put("TXT-KKIFM211-INF1.SVC_STA_YMD",	"ハガキ用長期継続利用割引事前通知情報.サービス開始年月日");
		itemvalueMap.put("TXT-KKIFM211-INF1.WRI_STAT_YMD",	"ハガキ用長期継続利用割引事前通知情報.割引適用開始年月日");
		itemvalueMap.put("TXT-KKIFM211-INF1.WRI_END_YMD",	"ハガキ用長期継続利用割引事前通知情報.割引適用終了年月日");
		itemvalueMap.put("TXT-KKIFM211-INF1.WRI_TRN",		"ハガキ用長期継続利用割引事前通知情報.長期継続利用割引区分");
		itemvalueMap.put("TXT-KKIFM211-INF1.MAIL_CD",		"ハガキ用長期継続利用割引事前通知情報.メールコード");
		return itemvalueMap;
	}
	
	/**
	 * 業務パラメータの文章を返す。（％は置換する）
	 * @param inMap 入力レコード
	 * @param result 住所等レコード
	 * @return 結合された文章（％置換済）
	 * @throws Exception 各種エラー
	 */
	private String executeReplace(JBSbatServiceInterfaceMap inMap, JBSbatCommonDBInterface result) throws Exception
	{
		// 業務プロパティ置換用配列
		String[] workBodyStrs = new String[17];
		
		int i = 1;
		// 契約者氏名
		workBodyStrs[i] = result.getString(JBSbatCK_T_CUST.CUST_NM);
		
		// 入力レコード処理日
		String shoriYmd = this.mRerunOpedate.toString();
		// 年月日分解
		workBodyStrs[++i] = shoriYmd.substring(0, 4);
		workBodyStrs[++i] = shoriYmd.substring(4, 6);
		workBodyStrs[++i] = shoriYmd.substring(6, 8);
		
		// サービス開始年月日
		String svcStartYmd = inMap.getString(JBSbatKKIFM211.SVC_STA_YMD);
		// 年月日分解
		workBodyStrs[++i] = svcStartYmd.substring(0, 4);
		workBodyStrs[++i] = svcStartYmd.substring(4, 6);
		workBodyStrs[++i] = svcStartYmd.substring(6, 8);
		
		// 次回割引適用開始年月日を取得
		String wriStartYmd = inMap.getString(JBSbatKKIFM211.WRI_STAT_YMD);
		// 年月日分解
		workBodyStrs[++i] = wriStartYmd.substring(0, 4);
		workBodyStrs[++i] = wriStartYmd.substring(4, 6);
		workBodyStrs[++i] = wriStartYmd.substring(6, 8);
		
		// 長期継続利用割引区分
		workBodyStrs[++i] = inMap.getString(JBSbatKKIFM211.WRI_TRN);
		// サービス契約ステータス
		workBodyStrs[++i] = inMap.getString(JBSbatKKIFM211.CD_DIV_NM);
		
		// 今回割引終了開始年月日を取得
		String wriEndYmd = inMap.getString(JBSbatKKIFM211.WRI_END_YMD);
		// 年月日分解
		workBodyStrs[++i] = wriEndYmd.substring(0, 4);
		workBodyStrs[++i] = wriEndYmd.substring(4, 6);
		workBodyStrs[++i] = wriEndYmd.substring(6, 8);
		
		// メールコード
		String mail_cd = inMap.getString(JBSbatKKIFM211.MAIL_CD);
		// メールタイトル
		workBodyStrs[++i] = this.mailTitles.get(mail_cd);
		
		// 業務パラメータの文字列を置換
		String workStrs = executeReplaceWork(workBodyStrs);
		return workStrs;
	}
	
	/**
	 * 業務パラメータ文章を配列で置換する
	 * @param workBodyStrs 業務パラメータ置換文字配列
	 * @return 置換済み文字列
	 */
	private String executeReplaceWork(String[] workBodyStrs)
	{
		String[] soeW = SOE_W;
		// 業務パラメータ文書コピー
		String wParam = this.mWorkParam.toString();
		// 置換開始
		for(int i = 1; i < soeW.length; i++)
		{
			wParam = wParam.replaceAll("%" + soeW[i] + "%", workBodyStrs[i]);
		}
		return wParam;
	}
}
