/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKMailSendInfoSaksei
*	ソースファイル名	：JBSbatKKMailSendInfoSaksei.java
*	作成者				：富士通　
*	作成日				：2011年08月22日
*＜機能概要＞
*　メール送信情報作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/08/22  FJ)倉上		新規作成
*	v5.00.01	2013/12/20  FJ)古内		【OM-2013-0005227】障害対応
*	v5.00.02	2014/01/21  FJ)古内		【OM-2014-0000197】障害対応
*	v14.00.00	2015/06/11  FJ)張本		【OM-2015-0000104】障害対応
*********************************************************************/
package eo.business.service;

import java.io.IOException;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.util.file.JBSbatKKIFM079;
import eo.business.util.file.JBSbatKKIFM088;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatDateUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKMailSendInfoSaksei extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 送信予定年月日時分秒設定キー */
	private static final String MAIL_SEND_RSV_DTM = "MAIL_SEND_RSV_DTM";
	
	/** メールの送信パターン(ﾃﾞｨﾚｲﾄ) */
	private static final String MAIL_SEND_PATTERN_CD_02 = "02";
	
	/** メールの送信パターンコード設定キー */
	private static final String MAIL_SEND_PATTERN_CD = "MAIL_SEND_PATTERN_CD";
	
	/** メールの送信先アドレス設定キー */
	private static final String MLAD_TO = "MLAD_TO";
	
	/** メール送信番号取得キー*/
	private static final String MAIL_SEND_NO = "MAIL_SEND_NO";
	
	/** 本文に埋め込む非定型な置換文字列設定キー*/
	private static final String TEXT_HTK_CKAN_MOJI = "TEXT_HTK_CKAN_MOJI";
	
	/** 改行文字列*/
	private static final String STR_KAIGYO = "改行";
	
	/** 改行コード*/
	private static final String KAIGYO_CD = "\n";
	
	/** 工事進捗状況PCメールコード*/
	private static final String PC_MAIL_CODE = "KKM1000001";
	
	/** 工事進捗状況携帯メールコード*/
	private static final String KEITAI_MAIL_CODE = "KKM1000002";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		super.logPrint.printDebugLog("execute_START");
		
		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		// メール送信共通部品パタメータ格納
		HashMap<String, Object> map = new HashMap<String, Object>();
		
		// 入出力インターフェースオブジェクトを生成(送信対象キーデータ結果ファイル用)
		JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();
		
		// メール送信共通部品処理結果格納
		HashMap<String, Object> result_map = null;
		
		// PC用メールアドレスの取得
		String tchi_mlad = inMap.getString(JBSbatKKIFM079.KOJI_PRG_TCHI_MLAD);
		
		// 携帯用メールアドレスの取得
		String ktai_mlad = inMap.getString(JBSbatKKIFM079.KJSC_TCH_KTAI_MLAD);
		
		// 送信予定年月日時分秒の設定
		map.put(MAIL_SEND_RSV_DTM, JBSbatDateUtil.adjustDate(super.opeDate, 1) + "090000000");
		
		// メール送信パターンの設定
		map.put(MAIL_SEND_PATTERN_CD, MAIL_SEND_PATTERN_CD_02);
		
		// メール本文非定型文字格納
		String[] htk_cakn_moji = new String[3];
		
		// メール本文非定型部１（申込書番号）
		htk_cakn_moji[0] = inMap.getString(JBSbatKKIFM079.MSKMSHO_NO);
// +++++++++++++++++ v5.00.02 変更開始 +++++++++++++++++
		if ("009".equals(inMap.getString(JBSbatKKIFM079.KOJIAK_SBT_CD)))
		{
			htk_cakn_moji[0] = inMap.getString(JBSbatKKIFM079.KOJIAK_NO);
		}
// +++++++++++++++++ v5.00.02 変更終了 +++++++++++++++++
// +++++++++++++++++ v14.00.00 追加開始 ++++++++++++++++
		if ("".equals(htk_cakn_moji[0]))
		{
			// 申込番号
			String mskmNo = (String)inMap.get(JBSbatKKIFM079.MSKM_NO);
			// EKKB0010CW:エラーが発生しましたが、処理を継続します。エラー内容(%1%)
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW, new String[] { "【申込番号】" + mskmNo
					+ "　メール本文非定型部１（申込書番号）に空白が設定されています" });
			return outputBean;
		}
// +++++++++++++++++ v14.00.00 追加終了 ++++++++++++++++
		
		// メール本文非定型部２（サービス名）
		String svc_nm = (String)inMap.get(JBSbatKKIFM079.SVC_NM);
		htk_cakn_moji[1] = svc_nm.replaceAll(STR_KAIGYO, KAIGYO_CD);
		
		htk_cakn_moji[2] = getMailHombun(inMap);
		
		// 置換文字列の設定		
		map.put(TEXT_HTK_CKAN_MOJI, htk_cakn_moji);
		
		// メール送信先アドレス（TO）の設定。
		String[] mail_to = new String[1];
		
		// PC用メールアドレスのみが設定されている場合
		if (tchi_mlad != null && !"".equals(tchi_mlad))
		{
			mail_to[0] = tchi_mlad;
			map.put(MLAD_TO, mail_to);
			
			// メールコードの設定
			map.put(JBSbatKKIFM079.MAIL_CD, PC_MAIL_CODE);
			
			// メール送信情報格納処理の呼び出し
			result_map = mailSenfExecute(commonItem, map);
			
			// 採番したメール送信番号取得
			String mail_send_no = (String)result_map.get(MAIL_SEND_NO);
			
			// メール送信番号を設定
			outmap.set(JBSbatKKIFM088.MAIL_SEND_NO_PC, mail_send_no);
			
			// メール送信情報設定
			setMailSendInfo(inMap, outmap, mail_send_no);
		}
		
		// 携帯用メールアドレスのみが設定されている場合
		if (ktai_mlad != null && !"".equals(ktai_mlad))
		{
			mail_to[0] = ktai_mlad;
			map.put(MLAD_TO, mail_to);
			
			// メールコードの設定
			map.put(JBSbatKKIFM079.MAIL_CD, KEITAI_MAIL_CODE);
			
			// メール送信情報格納処理の呼び出し
			result_map = mailSenfExecute(commonItem, map);
			// 採番したメール送信番号取得
			String mail_send_no = (String)result_map.get(MAIL_SEND_NO);
			
			// メール送信番号を設定
			outmap.set(JBSbatKKIFM088.MAIL_SEND_NO_KEITAI, mail_send_no);
			
			// メール送信情報設定
			setMailSendInfo(inMap, outmap, mail_send_no);
		}
		
		outmap.setOutFlg(true);
		outputBean.addOutMapList(outmap);
		
		super.logPrint.printDebugLog("execute_END");
		
		return outputBean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * メール送信情報格納処理。<br>
	 * <p>
	 * @param commonItem バッチ共通電文
	 * @param inMap 入力情報
	 * @param map パラメータ情報格納
     * @return HashMap map 採番部品で発行した採番値をセットしたHashMap。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 * @throws IOException 
	 */	
	private HashMap<String, Object> mailSenfExecute(JBSbatCommonItem commonItem, HashMap<String, Object> map) throws Exception
	{
		// メール送信情報格納処理を呼び出します。
		HashMap<String, Object> result_map = JCCBatCommon.insertTMailSend(commonItem, map);
		
		return result_map;
	}
	
	/**
	 * メール送信対象データ格納処理。<br>
	 * <p>
	 * @param commonItem バッチ共通電文
	 * @param inMap 入力情報
	 * @param outmap 出力情報
	 * @param mail_send_no メール送信番号
	 * @throws Exception 業務サービス内で発生した例外全般。
	 * @throws IOException 
	 */	
	private void setMailSendInfo(JBSbatServiceInterfaceMap inMap, JBSbatServiceInterfaceMap outmap,
			String mail_send_no) throws Exception
	{
		// 工事案件番号の設定
		outmap.set(JBSbatKKIFM088.KOJIAK_NO, inMap.getString(JBSbatKKIFM079.KOJIAK_NO));
		
		// 申込番号の設定
		outmap.set(JBSbatKKIFM088.MSKM_NO, inMap.getString(JBSbatKKIFM079.MSKM_NO));
		
		// 工事進捗通知メールアドレスの設定
		outmap.set(JBSbatKKIFM088.KOJI_PRG_TCHI_MLAD, inMap.getString(JBSbatKKIFM079.KOJI_PRG_TCHI_MLAD));
		
		// 工事進捗通知携帯メールアドレスの設定
		outmap.set(JBSbatKKIFM088.KJSC_TCH_KTAI_MLAD, inMap.getString(JBSbatKKIFM079.KJSC_TCH_KTAI_MLAD));
		
	}
	
	/**
	 * メール本文非定型部列取得。<br>
	 * <p>
	 * @param commonItem バッチ共通電文
	 * @param inMap 入力情報
	 * @param outmap 出力情報
	 * @param mail_send_no メール送信番号
	 * @return メール本文文字列
	 * @throws Exception 業務サービス内で発生した例外全般。
	 * @throws IOException 
	 */	
	private String getMailHombun(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// メール本文文字列保持
		StringBuilder str = new StringBuilder();
		
// +++++++++++++++++++++++++++ v5.00.01 変更開始 +++++++++++++++++++++++++++
// 空文字チェック追加（コース変更工事時は出力対象外のため、改行も出力しない。）
		// 受付完了進捗内容取得
		String uk_fin = inMap.getString(JBSbatKKIFM079.UK_FIN);
		if (uk_fin != null && !"".equals(uk_fin))
		{
			str.append(uk_fin.replaceAll(STR_KAIGYO, KAIGYO_CD));
			str.append(KAIGYO_CD);
			str.append(KAIGYO_CD);
		}
// +++++++++++++++++++++++++++ v5.00.01 変更終了 +++++++++++++++++++++++++++
		
		// 工程光ルート調査・設計進捗内容取得
		String hroute_chosa_dsgn = inMap.getString(JBSbatKKIFM079.STEP_HROUTE_CHOSA_DSGN);
		if (hroute_chosa_dsgn != null && !"".equals(hroute_chosa_dsgn))
		{
			str.append(hroute_chosa_dsgn.replaceAll(STR_KAIGYO, KAIGYO_CD));
			str.append(KAIGYO_CD);
			str.append(KAIGYO_CD);
		}
		
		// お客様宅内調査日程調整進捗内容取得
		String cust_takcho_ntadj = inMap.getString(JBSbatKKIFM079.CUST_TAKCHO_NTADJ);
		if (cust_takcho_ntadj != null && !"".equals(cust_takcho_ntadj))
		{
			str.append(cust_takcho_ntadj.replaceAll(STR_KAIGYO, KAIGYO_CD));
			str.append(KAIGYO_CD);
			str.append(KAIGYO_CD);
		}
		
		// お客様宅内調査進捗内容取得
		String cust_takcho_cd = inMap.getString(JBSbatKKIFM079.CUST_TAKCHO_CD);
		if (cust_takcho_cd != null && !"".equals(cust_takcho_cd))
		{
			str.append(cust_takcho_cd.replaceAll(STR_KAIGYO, KAIGYO_CD));
			str.append(KAIGYO_CD);
			str.append(KAIGYO_CD);
		}
		
		// 各種許可申請進捗内容取得
		String vari_kyoka_shinsei = inMap.getString(JBSbatKKIFM079.VARI_KYOKA_SHINSEI);
		if (vari_kyoka_shinsei != null && !"".equals(vari_kyoka_shinsei))
		{
			str.append(vari_kyoka_shinsei.replaceAll(STR_KAIGYO, KAIGYO_CD));
			str.append(KAIGYO_CD);
			str.append(KAIGYO_CD);
		}
		
		// 承諾書受領進捗内容取得
		String sdaks_rcp = inMap.getString(JBSbatKKIFM079.SDAKS_RCP);
		if (sdaks_rcp != null && !"".equals(sdaks_rcp))
		{
			str.append(sdaks_rcp.replaceAll(STR_KAIGYO, KAIGYO_CD));
			str.append(KAIGYO_CD);
			str.append(KAIGYO_CD);
		}
		
		// 光ケーブル線路工事進捗内容取得
		String hcable_line_koji = inMap.getString(JBSbatKKIFM079.HCABLE_LINE_KOJI);
		if (hcable_line_koji != null && !"".equals(hcable_line_koji))
		{
			str.append(hcable_line_koji.replaceAll(STR_KAIGYO, KAIGYO_CD));
			str.append(KAIGYO_CD);
			str.append(KAIGYO_CD);
		}
		
		// お客様宅内工事進捗内容取得
		String cust_takni_koji = inMap.getString(JBSbatKKIFM079.CUST_TAKNI_KOJI);
		if (cust_takni_koji != null && !"".equals(cust_takni_koji))
		{
			str.append(cust_takni_koji.replaceAll(STR_KAIGYO, KAIGYO_CD));
			str.append(KAIGYO_CD);
			str.append(KAIGYO_CD);
		}
		
		// ご利用開始進捗内容取得
		String use_sta = inMap.getString(JBSbatKKIFM079.USE_STA);
		if (use_sta != null && !"".equals(use_sta))
		{
			str.append(use_sta.replaceAll(STR_KAIGYO, KAIGYO_CD));
			str.append(KAIGYO_CD);
			str.append(KAIGYO_CD);
		}
		
		return str.toString();
	}
}
