/*********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名			：eo顧客基幹システム
 *	モジュール名		：JBSbatFUSyokaiFBMailSend
 *	ソースファイル名	：JBSbatFUSyokaiFBMailSend.java
 *	作成者				：富士通
 *	作成日				：2012年03月22日
 *＜機能概要＞
 *　紹介者フィードバックメール送信部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2012/03/22   富士通		新規作成
 *	v4.00.00	2012/10/26   FJ)小林	【IT1-2012-00001698】
 *	v4.01.00	2013/01/18   FJ)藤原	【ST2-2013-0000033】
 *	v4.02.00	2013/01/22   FJ)大塚	【IT1-2013-0000254】
 *	v4.03.00	2013/04/09   FJ)八坂	【IT1-2013-0000821】
 *	v4.04.00	2013/05/15   FJ)岡井	【TAI-2013-0000026】日中バッチ運用日付対応
 *	v5.00.00	2013/07/13   FJ)岡井	【障害対応】FROM未設定対応
 *	v15.00.00	2015/07/31   FJ)西川	【OM-2015-0001796】紹介者フィードバックメール送信の長時間走行対応
 *	v32.00.00	2017/05/26   FJ)謝		【ANK-3057-00-00】自動送信メールの文面変更
*   v39.00      2018/09/25   FJ)大島    【ANK-3421-00-00】【eo顧客S】メール文面の見直し対応
*   v73.00      2025/02/13   FJ)浅井    【ANK-4427-00-00】NTT卸対応
 *********************************************************************/
package eo.business.service;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JFUBatCommon;
import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessError;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.application.JCCbatFrameworkException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JBSbatBusinessFileUtil;
import eo.framework.util.JCCBatchEsbInterface;

/**
 * (クラスの機能概要)
 * <p>
 *<BR>
 *
 * @author 富士通
 */
public class JBSbatFUSyokaiFBMailSend extends JBSbatBusinessService
{
	/** ▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼ */
	/** テーブル(申込明細) */
	private static final String D_TBL_NAME_KK_T_MSKM_DTL = "KK_T_MSKM_DTL";

	/** テーブル(工事工程進捗) */
	private static final String D_TBL_NAME_KU_T_KOJI_STEP_PRG = "KU_T_KOJI_STEP_PRG";

	/** テーブル(紹介) */
	private static final String D_TBL_NAME_KK_T_INTR = "KK_T_INTR";

	/** テーブル(メール) */
	private static final String D_TBL_NAME_CC_M_MAIL = "CC_M_MAIL";

	/** SQL定義キー(FU_SELECT_001) */
	private static final String KK_T_MSKM_DTL_FU_SELECT_001 = "FU_SELECT_001";

	/** SQL定義キー(FU_SELECT_002) */
	private static final String KK_T_MSKM_DTL_FU_SELECT_002 = "FU_SELECT_002";

	/** SQL定義キー(FU_SELECT_003) */
	private static final String KK_T_MSKM_DTL_FU_SELECT_003 = "FU_SELECT_003";

	/** SQL定義キー(FU_SELECT_004) */
	private static final String KK_T_MSKM_DTL_FU_SELECT_004 = "FU_SELECT_004";

	/** SQL定義キー(FU_SELECT_001) */
	private static final String KU_T_KOJI_STEP_PRG_FU_SELECT_001 = "FU_SELECT_001";

	/** SQL定義キー(FU_UPDATE_001) */
	private static final String KK_T_INTR_FU_UPDATE_001 = "FU_UPDATE_001";

	/** SQL定義キー(FU_UPDATE_002) */
	private static final String KK_T_INTR_FU_UPDATE_002 = "FU_UPDATE_002";

	/** SQL定義キー(FU_UPDATE_003) */
	private static final String KK_T_INTR_FU_UPDATE_003 = "FU_UPDATE_003";

	/** SQL定義キー(FU_UPDATE_004) */
	private static final String KK_T_INTR_FU_UPDATE_004 = "FU_UPDATE_004";

	/** SQL定義キー(FU_SELECT_001) */
	private static final String CC_M_MAIL_FU_SELECT_001 = "FU_SELECT_001";

	/** テーブルアクセスクラス(申込明細) */
	private JBSbatSQLAccess db_KK_T_MSKM_DTL = null;

	/** テーブルアクセスクラス(工事工程進捗) */
	private JBSbatSQLAccess db_KU_T_KOJI_STEP_PRG = null;

	/** テーブルアクセスクラス(紹介) */
	private JBSbatSQLAccess db_KK_T_INTR = null;

	/** テーブルアクセスクラス(メール) */
	private JBSbatSQLAccess db_CC_M_MAIL = null;

	/** ▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲ */

	/** メッセージキー */
	private static final String EFUB0030KE = JPCBatchMessageConstant.EFUB0030KE;

	/** メッセージキー */
	private static final String EFUB0120AI = JPCBatchMessageConstant.EFUB0120AI;

	/** メッセージキー */
	private static final String EFUB0130AI = JPCBatchMessageConstant.EFUB0130AI;

	/** メッセージキー */
	private static final String EFUB0160JW = JPCBatchMessageConstant.EFUB0160JW;

	/** メッセージキー */
	private static final String EFUB0180KE = JPCBatchMessageConstant.EFUB0180KE;

	/** メッセージキー */
	private static final String EFUB0220KE = JPCBatchMessageConstant.EFUB0220KE;

	/** タイムスタンプ置換用文字列 */
	private static final String FILE_NM_TIMESTAMP = "yyyymmddhhmmss";

	/** 項目名 共通系 */
	private static final String CASE_MSG_1 = "CaseCsvファイル(全件)";

	private static final String CASE_MSG_2 = "CaseCsvファイル(ホームタイプ申込)";

	private static final String CASE_MSG_3 = "CaseCsvファイル(ホームタイプキャンセル)";

	private static final String CASE_MSG_4 = "CaseCsvファイル(メゾンタイプ申込)";

	private static final String CASE_MSG_5 = "CaseCsvファイル(マンションタイプ申込)";

	private static final String MAIL_MSG_1 = "ホームタイプ申込完了通知メール";

	private static final String MAIL_MSG_2 = "ホームタイプキャンセル完了通知メール";

	private static final String MAIL_MSG_3 = "メゾンタイプ申込完了通知メール";

	private static final String MAIL_MSG_4 = "マンションタイプ申込完了通知メール";

	private static final String MAIL_MSG_5 = "紹介者フィードバックメール合計";

	private static final String MAIL_HEADER_KEY = "Subject";

	private static final String MAIL_SEND_ERR = "完了通知メール送信処理エラーの為、取得対象外";

// ANK-3057-00-00 DEL START
//	/** メール表示用キー Webからのお問い合わせ */
//	private static final String ML_URL_WEB = "FU_BAT_ML_URL_WEB";
// ANK-3057-00-00 DEL END

	/**
	 * サービスコンポーネント名
	 */
	private static final String SERVICE_ID = "FUSV0224";

	private static final String SC_NAME = "FUSV022401SC";

	/**
	 * 初期処理
	 *
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
		/** ▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼ */
		/** ▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼ */
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_MSKM_DTL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_MSKM_DTL);
		db_KU_T_KOJI_STEP_PRG = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_KOJI_STEP_PRG);
		db_KK_T_INTR = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_INTR);
		db_CC_M_MAIL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CC_M_MAIL);

		/** ▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲ */
		/** ▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲ */
	}

	/**
	 * 主処理
	 *
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
		/** ▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼ */

		// FREEパラメータ取得
		String strFreeParam = commonItem.getFreeItem();
		if (strFreeParam.length() == 0)
		{
			throw new JBSbatBusinessException(EFUB0030KE);
		}
		// パラメータを区切り文字で分割する
		String[] lines = strFreeParam.split(JFUStrConst.S_PARAM_DELIM);
		// パラメータ取得
		String strFreeParam1 = lines[0]; // CASECSVファイル
		String strFreeParam2 = lines[1]; // CASE件数
		String strFreeParam3 = lines[2]; // CASEフラグファイル

		int iCaseAllCnt = 0; // CASEファイル書込み件数(全ての書込件数)
		int iCaseHomeMskmCnt = 0; // CASEファイル書込み件数(ホームタイプ申込の書込件数)
		int iCaseHomeCancelCnt = 0; // CASEファイル書込み件数(ホームタイプキャンセルの書込件数)
		int iCaseMezonMskmCnt = 0; // CASEファイル書込み件数(メゾンタイプ申込の書込件数)
		int iCaseMansionMskmCnt = 0; // CASEファイル書込み件数(マンションタイプ申込の書込件数)
		int iHomeMskmMailCnt = 0; // ホームタイプ申込完了通知メール送信件数
		int iHomeCancelMailCnt = 0; // ホームタイプキャンセル完了通知メール送信件数
		int iMezonMskmMailCnt = 0; // メゾンタイプ申込完了通知メール送信件数
		int iMansionMskmMailCnt = 0; // マンションタイプ申込完了通知メール送信件数
		int iMailCnt = 0; // マンションタイプ申込完了通知メール送信件数

		// 現在の日付時刻を取得
		String sysDateTimeStamp = JFUBatCommon.getSysDateTimeStamp();

		// システム日時取得
		String strSysDateTime = JFUBatCommon.getSysDateTime();

		// 運用日付取得
		String strOpeDate = super.opeDate;

		ArrayList<String[]> strCaseFileList = new ArrayList<String[]>();
		String[] strCaseList = new String[7];

		// プロパティファイル保持の携帯電話ドメイン設定値を区切り文字で分割する
		String[] domains = (JBSbatAplConst.getAplConstValue(JFUStrConst.FU_M_DOMAIN_SYOKAI)).split(JFUStrConst.S_SEP_CAM);

		String logMsgTitle = "// -------- １．ホームタイプ申込完了通知メール送信処理 -------- //";

		// ホームタイプ完了通知メール送信対象結果格納領域を生成する
		JBSbatCommonDBInterface homeTypeMap = new JBSbatCommonDBInterface();

		// ホームタイプ完了通知メール送信対象取得
		homeTypeMap.setValue(strOpeDate);
		executeKK_T_MSKM_DTL_FU_SELECT_001(homeTypeMap.getList().toArray());

		// 紹介者コードの重複チェック
		String duplicationIntrCd = null;

		// 取得したレコードを1件づつ読込む
		for (homeTypeMap = db_KK_T_MSKM_DTL.selectNext(); null != homeTypeMap; homeTypeMap = db_KK_T_MSKM_DTL.selectNext())
		{
			// SQL取得項目を各変数へ格納
			String strIntrCd = homeTypeMap.getString("INTR_CD");
			String strShokaiNm = homeTypeMap.getString("SHOKAISHA_NM");
			String strReksMlad = homeTypeMap.getString("SHOKAISHA_RRKS_MLAD");
			String strBnchigo = homeTypeMap.getString("SHOKAISHA_AD_BNCHIGO");
			String strMskmDtlNo = homeTypeMap.getString("MSKM_DTL_NO");
			String strMskmsho_No = homeTypeMap.getString("MSKMSHO_NO");
			String strSvcKeiNo = homeTypeMap.getString("SVC_KEI_NO");
			String strIntrSvcKeiNo = homeTypeMap.getString("INTR_SVC_KEI_NO");
			String strSvcKeiStat = homeTypeMap.getString("SVC_KEI_STAT");

			if (isExcludeDomain(domains, strReksMlad))
			{
				super.logPrint.printDebugLog("携帯ドメインチェックエラー:" + logMsgTitle + ":紹介コード:" + strIntrCd + JFUStrConst.HALF_COLON);

				// 紹介スキーマより取得したメールアドレスのドメインが携帯電話ドメインか判定する。

				// 携帯電話ドメインでなければ、紹介者フィードバックメール送信対象とする
				// 携帯電話ドメインであれば、紹介者フィードバックメール送信対象外として、次の処理へ移る。

				updateNoSendMail(strIntrCd);
				continue;
			}

			ArrayList<String> resutList = checkMailAddress(strReksMlad);
			String mailSendYouhi = resutList.get(0);
			String caseCreate = resutList.get(0);

			if (JFUStrConst.S_MAIL_SEND_YOUHI_1.equals(mailSendYouhi) && JFUStrConst.S_CASE_CREATE_1.equals(caseCreate))
			{
				super.logPrint.printDebugLog("メール／CASEチェックエラー:" + logMsgTitle + ":紹介コード:" + strIntrCd + JFUStrConst.HALF_COLON);
				updateNoSendMail(strIntrCd);
				continue;
			}

			// 工事工程進捗情報のキャンセルフラグを取得する
			String strCancelFlg = getCancelFlg(strOpeDate, strMskmDtlNo);

			if (!JFUBatCommon.isNotNullCheck(strCancelFlg))
			{
				// 工事工程進捗情報が存在しない場合は、スキップする。

				if (JFUStrConst.CD00037_100.equals(strSvcKeiStat) || JFUStrConst.CD00037_910.equals(strSvcKeiStat)
						|| JFUStrConst.CD00037_920.equals(strSvcKeiStat))
				{
					// 工事工程進捗情報が存在しない
					// 且つサービス契約のステータスがサービス提供中、解約済、キャンセル済の場合
					// ホームタイプ申込完了通知メール送信対象外として、次の処理へ移る。
				    updateNoSendMail(strIntrCd);
					continue;
				}

				continue;
			}
			else if (JFUStrConst.S_CANCEL_FLG_0.equals(strCancelFlg))
			{
				// キャンセルでない場合

			}
			else if (JFUStrConst.S_CANCEL_FLG_1.equals(strCancelFlg) || JFUStrConst.S_CANCEL_FLG_2.equals(strCancelFlg)
					|| JFUStrConst.S_CANCEL_FLG_3.equals(strCancelFlg) || JFUStrConst.S_CANCEL_FLG_4.equals(strCancelFlg))
			{
				// 受付完了メールを送信していないキャンセルの場合はメール送信対象外。

				super.logPrint.printDebugLog("キャンセルエラー:" + logMsgTitle + ":紹介コード:" + strIntrCd + JFUStrConst.HALF_COLON);

				updateNoSendMail(strIntrCd);
				continue;
			}

			if (JFUBatCommon.isNotNullCheck(strIntrCd) && strIntrCd.equals(duplicationIntrCd))
			{
				super.logPrint.printDebugLog("重複のため、スキップ:" + logMsgTitle + ":紹介コード:" + strIntrCd + JFUStrConst.HALF_COLON);

				// 重複チェックを行い前処理と同じ場合は、次の繰り返し処理へ移る。
				continue;
			}
			duplicationIntrCd = strIntrCd;

			if (JFUStrConst.S_MAIL_SEND_YOUHI_0.equals(mailSendYouhi))
			{
				ArrayList<String> mlSendList = new ArrayList<String>();
				mlSendList.add(JFUStrConst.MAILCD_FEEDBACK_MSKM);
				mlSendList.add(JFUStrConst.EMPTY);
				mlSendList.add(strReksMlad);
				mlSendList.add(strShokaiNm);
				mlSendList.add(strIntrCd);
// ANK-3421-00-00 ADD START
// ANK-4427-00-00 MOD START
				mlSendList.add(JFUStrConst.MAIL_DTL_CD_FUD1000087);
// ANK-4427-00-00 MOD END
// ANK-3421-00-00 ADD END
				// メール送信サービス呼出メソッドへパラメータを引き渡す
				String result = makeSendMailInfo(mlSendList, strSvcKeiNo);

				JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
				dbList.setValue(sysDateTimeStamp); // 申込通知メール送信年月日時分秒

				// 紹介テーブルの更新
				if (!JFUStrConst.S_MAIL_SEND_RESULT_0.equals(result))
				{
					dbList.setValue(JFUStrConst.S_ML_SEND_CD_2); // 申込メール送信コード
					dbList.setValue(strIntrCd); // 紹介コード
					executeKK_T_INTR_FU_UPDATE_001(dbList.getList().toArray());
					continue;
				}

				dbList.setValue(JFUStrConst.S_ML_SEND_CD_1); // 申込メール送信コード
				dbList.setValue(strIntrCd); // 紹介コード
				executeKK_T_INTR_FU_UPDATE_001(dbList.getList().toArray());

				iHomeMskmMailCnt++;
				iMailCnt++;
			}
			else
			{
				updateNoSendMail(strIntrCd);
			}

			if (JFUStrConst.S_CASE_CREATE_0.equals(caseCreate))
			{
				// CASECSVファイル作成
				strCaseList[0] = strFreeParam1;
				strCaseList[1] = strIntrSvcKeiNo;
				strCaseList[2] = strIntrCd;
				strCaseList[3] = strCancelFlg;
				strCaseList[4] = strMskmsho_No;
				strCaseList[5] = strBnchigo;
				strCaseList[6] = strSysDateTime;
				strCaseFileList.add(strCaseList.clone());

				iCaseHomeMskmCnt++;
				iCaseAllCnt++;
			}
		}

		logMsgTitle = "// -------- ２．ホームタイプキャンセル通知メール送信処理 --------//";

		// ホームタイプキャンセルメール送信対象結果格納領域を生成します
		JBSbatCommonDBInterface homeTypeCancelMap = new JBSbatCommonDBInterface();

		// ホームタイプキャンセルメール送信対象取得
		homeTypeCancelMap.setValue(strOpeDate);
		executeKK_T_MSKM_DTL_FU_SELECT_002(homeTypeCancelMap.getList().toArray());

		duplicationIntrCd = null;

		// 取得したレコードを1件づつ読込む
		for (homeTypeCancelMap = db_KK_T_MSKM_DTL.selectNext(); null != homeTypeCancelMap; homeTypeCancelMap = db_KK_T_MSKM_DTL.selectNext())
		{
			// SQL取得項目を各変数へ格納
			String strIntrCd = homeTypeCancelMap.getString("INTR_CD");
			String strShokaiNm = homeTypeCancelMap.getString("SHOKAISHA_NM");
			String strReksMlad = homeTypeCancelMap.getString("SHOKAISHA_RRKS_MLAD");
			String strBnchigo = homeTypeCancelMap.getString("SHOKAISHA_AD_BNCHIGO");
			String strMskmDtlNo = homeTypeCancelMap.getString("MSKM_DTL_NO");
			String strMskmsho_No = homeTypeCancelMap.getString("MSKMSHO_NO");
			String strSvcKeiNo = homeTypeCancelMap.getString("SVC_KEI_NO");
			String strIntrSvcKeiNo = homeTypeCancelMap.getString("INTR_SVC_KEI_NO");
			String strMskmtch_Dtm = homeTypeCancelMap.getString("MSKM_TCH_ML_SEND_DTM");
			String strSvcKeiStat = homeTypeCancelMap.getString("SVC_KEI_STAT");

			if (isExcludeDomain(domains, strReksMlad))
			{
				super.logPrint.printDebugLog("携帯ドメインチェック:ホームキャンセル:紹介コード:" + strIntrCd + JFUStrConst.HALF_COLON);

				// 紹介スキーマより取得したメールアドレスのドメインが携帯電話ドメインか判定する。

				// 携帯電話ドメインでなければ、紹介者フィードバックメール送信対象とする
				// 携帯電話ドメインであれば、紹介者フィードバックメール送信対象外として、次の処理へ移る。

				updateNoSendCancelMail(strIntrCd);
				continue;
			}

			ArrayList<String> resutList = checkMailAddress(strReksMlad);
			String mailSendYouhi = resutList.get(0);
			String caseCreate = resutList.get(0);

			if (JFUStrConst.S_MAIL_SEND_YOUHI_1.equals(mailSendYouhi) && JFUStrConst.S_CASE_CREATE_1.equals(caseCreate))
			{
				super.logPrint.printDebugLog("メール／CASEチェックエラー:" + logMsgTitle + ":紹介コード:" + strIntrCd + JFUStrConst.HALF_COLON);
				updateNoSendCancelMail(strIntrCd);
				continue;
			}

			if (JFUStrConst.CD00037_100.equals(strSvcKeiStat)) {
				// サービス提供中になった時点で、キャンセルメールを送信対象外とする。
				updateNoSendCancelMail(strIntrCd);
				continue;
			}

			// 申込通知メール送信年月日時分秒がnullの場合は処理を実施せず、レコードを読み飛ばす
			if (null == strMskmtch_Dtm)
			{
				continue;
			}

			// 工事工程進捗情報のキャンセルフラグを取得する
			String strCancelFlg = getCancelFlg(strOpeDate, strMskmDtlNo);
			if (!(JFUStrConst.S_CANCEL_FLG_1.equals(strCancelFlg) || JFUStrConst.S_CANCEL_FLG_2.equals(strCancelFlg)
					|| JFUStrConst.S_CANCEL_FLG_3.equals(strCancelFlg) || JFUStrConst.S_CANCEL_FLG_4.equals(strCancelFlg)))
			{
				super.logPrint.printDebugLog("未キャンセルの為、次の処理へ:" + logMsgTitle + ":紹介コード:" + strIntrCd + JFUStrConst.HALF_COLON);

				// キャンセルでない場合
				continue;
			}

			if (JFUBatCommon.isNotNullCheck(strIntrCd) && strIntrCd.equals(duplicationIntrCd))
			{
				super.logPrint.printDebugLog("重複のため、スキップ:" + logMsgTitle + ":紹介コード:" + strIntrCd + JFUStrConst.HALF_COLON);

				// 重複チェックを行い前処理と同じ場合は、次の繰り返し処理へ移る。
				continue;
			}
			duplicationIntrCd = strIntrCd;

			if (JFUStrConst.S_MAIL_SEND_YOUHI_0.equals(mailSendYouhi))
			{
				ArrayList<String> mlSendList = new ArrayList<String>();
				mlSendList.add(JFUStrConst.MAILCD_FEEDBACK_CANCEL);
				mlSendList.add(JFUStrConst.EMPTY);
				mlSendList.add(strReksMlad);
				mlSendList.add(strShokaiNm);
				mlSendList.add(strIntrCd);
// ANK-3421-00-00 ADD START
// ANK-4427-00-00 MOD START
				mlSendList.add(JFUStrConst.MAIL_DTL_CD_FUD1000087);
// ANK-4427-00-00 MOD END
// ANK-3421-00-00 ADD END

				// メール送信サービス呼出メソッドへパラメータを引き渡す
				String result = makeSendMailInfo(mlSendList, strSvcKeiNo);

				JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
				dbList.setValue(sysDateTimeStamp); // 申込通知メール送信年月日時分秒

				// 紹介テーブルの更新
				if (!JFUStrConst.S_MAIL_SEND_RESULT_0.equals(result))
				{
					dbList.setValue(JFUStrConst.S_ML_SEND_CD_2); // 申込メール送信コード
					dbList.setValue(strIntrCd); // 紹介コード
					executeKK_T_INTR_FU_UPDATE_002(dbList.getList().toArray());
					continue;
				}

				dbList.setValue(JFUStrConst.S_ML_SEND_CD_1); // 申込メール送信コード
				dbList.setValue(strIntrCd); // 紹介コード
				executeKK_T_INTR_FU_UPDATE_002(dbList.getList().toArray());

				iHomeCancelMailCnt++;
				iMailCnt++;
			}
			else
			{
				updateNoSendCancelMail(strIntrCd);
			}

			if (JFUStrConst.S_CASE_CREATE_0.equals(caseCreate))
			{
				strCaseList[0] = strFreeParam1;
				strCaseList[1] = strIntrSvcKeiNo;
				strCaseList[2] = strIntrCd;
				strCaseList[3] = strCancelFlg;
				strCaseList[4] = strMskmsho_No;
				strCaseList[5] = strBnchigo;
				strCaseList[6] = strSysDateTime;

				strCaseFileList.add(strCaseList.clone());

				iCaseHomeCancelCnt++;
				iCaseAllCnt++;
			}
		}

		logMsgTitle = "// -------- ３．メゾンタイプ完了通知メール送信処理 --------//";

		// メゾンタイプ完了通知メール送信対象結果格納領域を生成します
		JBSbatCommonDBInterface mezonTypeMap = new JBSbatCommonDBInterface();

		// ホームタイプ完了通知メール送信対象取得
		mezonTypeMap.setValue(strOpeDate);
		executeKK_T_MSKM_DTL_FU_SELECT_003(mezonTypeMap.getList().toArray());

		// 紹介者コードの重複チェック
		duplicationIntrCd = null;

		// 取得したレコードを1件づつ読込む
		for (mezonTypeMap = db_KK_T_MSKM_DTL.selectNext(); null != mezonTypeMap; mezonTypeMap = db_KK_T_MSKM_DTL.selectNext())
		{
			// SQL取得項目を各変数へ格納
			String strIntrCd = mezonTypeMap.getString("INTR_CD");
			String strShokaiNm = mezonTypeMap.getString("SHOKAISHA_NM");
			String strReksMlad = mezonTypeMap.getString("SHOKAISHA_RRKS_MLAD");
			String strBnchigo = mezonTypeMap.getString("SHOKAISHA_AD_BNCHIGO");
			String strMskmsho_No = mezonTypeMap.getString("MSKMSHO_NO");
			String strSvcKeiNo = mezonTypeMap.getString("SVC_KEI_NO");
			String strIntrSvcKeiNo = mezonTypeMap.getString("INTR_SVC_KEI_NO");
			String strSvcKeiStat = mezonTypeMap.getString("SVC_KEI_STAT");

			if (isExcludeDomain(domains, strReksMlad))
			{
				super.logPrint.printDebugLog("携帯ドメインチェック:	メゾン申込完了:紹介コード:" + strIntrCd + JFUStrConst.HALF_COLON);

				// 紹介スキーマより取得したメールアドレスのドメインが携帯電話ドメインか判定する。

				// 携帯電話ドメインでなければ、紹介者フィードバックメール送信対象とする
				// 携帯電話ドメインであれば、紹介者フィードバックメール送信対象外として、次の処理へ移る。

				updateNoSendMail(strIntrCd);
				continue;
			}

			ArrayList<String> resutList = checkMailAddress(strReksMlad);
			String mailSendYouhi = resutList.get(0);
			String caseCreate = resutList.get(0);

			if (JFUStrConst.S_MAIL_SEND_YOUHI_1.equals(mailSendYouhi) && JFUStrConst.S_CASE_CREATE_1.equals(caseCreate))
			{
				super.logPrint.printDebugLog("メール／CASEチェックエラー:" + logMsgTitle + ":紹介コード:" + strIntrCd + JFUStrConst.HALF_COLON);

				updateNoSendMail(strIntrCd);
				continue;
			}

			if (JFUStrConst.CD00037_010.equals(strSvcKeiStat))
			{
				// 照査済、締結済を送信対象とするため、次の処理へ移る。
				continue;
			}
			else if (JFUStrConst.CD00037_100.equals(strSvcKeiStat) || JFUStrConst.CD00037_910.equals(strSvcKeiStat)
					|| JFUStrConst.CD00037_920.equals(strSvcKeiStat))
			{
				// サービス提供中、解約済、キャンセル済になった時点で、メゾンタイプ完了通知メール送信対象外として次の処理へ移る。
				updateNoSendMail(strIntrCd);
				continue;
			}

			if (JFUBatCommon.isNotNullCheck(strIntrCd) && strIntrCd.equals(duplicationIntrCd))
			{
				// 重複チェックを行い前処理と同じ場合は、次の繰り返し処理へ移る。

				super.logPrint.printDebugLog("重複のため、スキップ:" + logMsgTitle + ":紹介コード:" + strIntrCd + JFUStrConst.HALF_COLON);
				continue;
			}

			duplicationIntrCd = strIntrCd;

			if (JFUStrConst.S_MAIL_SEND_YOUHI_0.equals(mailSendYouhi))
			{
				ArrayList<String> mlSendList = new ArrayList<String>();
				mlSendList.add(JFUStrConst.MAILCD_FEEDBACK_MSKM);
				mlSendList.add(JFUStrConst.EMPTY);
				mlSendList.add(strReksMlad);
				mlSendList.add(strShokaiNm);
				mlSendList.add(strIntrCd);
// ANK-3421-00-00 ADD START
// ANK-4427-00-00 MOD START
				mlSendList.add(JFUStrConst.MAIL_DTL_CD_FUD1000087);
// ANK-4427-00-00 MOD END
// ANK-3421-00-00 ADD END

				// メール送信サービス呼出メソッドへパラメータを引き渡す
				String result = makeSendMailInfo(mlSendList, strSvcKeiNo);

				JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
				dbList.setValue(sysDateTimeStamp); // 申込通知メール送信年月日時分秒

				// 紹介テーブルの更新
				if (!JFUStrConst.S_MAIL_SEND_RESULT_0.equals(result))
				{
					dbList.setValue(JFUStrConst.S_ML_SEND_CD_2); // 申込メール送信コード
					dbList.setValue(strIntrCd); // 紹介コード
					executeKK_T_INTR_FU_UPDATE_001(dbList.getList().toArray());
					continue;
				}

				dbList.setValue(JFUStrConst.S_ML_SEND_CD_1); // 申込メール送信コード
				dbList.setValue(strIntrCd); // 紹介コード
				executeKK_T_INTR_FU_UPDATE_001(dbList.getList().toArray());

				iMezonMskmMailCnt++;
				iMailCnt++;
			}
			else
			{
				updateNoSendMail(strIntrCd);
			}

			if (JFUStrConst.S_CASE_CREATE_0.equals(caseCreate))
			{
				// CASECSVファイル作成
				strCaseList[0] = strFreeParam1;
				strCaseList[1] = strIntrSvcKeiNo;
				strCaseList[2] = strIntrCd;
				strCaseList[3] = JFUStrConst.S_CANCEL_FLG_0;
				strCaseList[4] = strMskmsho_No;
				strCaseList[5] = strBnchigo;
				strCaseList[6] = strSysDateTime;

				strCaseFileList.add(strCaseList.clone());

				iCaseMezonMskmCnt++;
				iCaseAllCnt++;
			}

		}

		logMsgTitle = "// -------- ４．マンションタイプ完了通知メール送信処理 --------//";

		// マンションタイプ完了通知メール送信対象結果格納領域を生成します
		JBSbatCommonDBInterface mansionTypeMap = new JBSbatCommonDBInterface();

		// マンションタイプ完了通知メール送信対象取得
		mansionTypeMap.setValue(strOpeDate);
		executeKK_T_MSKM_DTL_FU_SELECT_004(mansionTypeMap.getList().toArray());

		// 紹介者コードの重複チェック
		duplicationIntrCd = null;

		// 取得したレコードを1件づつ読込む
		for (mansionTypeMap = db_KK_T_MSKM_DTL.selectNext(); null != mansionTypeMap; mansionTypeMap = db_KK_T_MSKM_DTL.selectNext())
		{

			// SQL取得項目を各変数へ格納
			String strIntrCd = mansionTypeMap.getString("INTR_CD");
			String strShokaiNm = mansionTypeMap.getString("SHOKAISHA_NM");
			String strReksMlad = mansionTypeMap.getString("SHOKAISHA_RRKS_MLAD");
			String strBnchigo = mansionTypeMap.getString("SHOKAISHA_AD_BNCHIGO");
			String strMskmsho_No = mansionTypeMap.getString("MSKMSHO_NO");
			String strSvcKeiNo = mansionTypeMap.getString("SVC_KEI_NO");
			String strIntrSvcKeiNo = mansionTypeMap.getString("INTR_SVC_KEI_NO");
			String strSvcKeiStat = mansionTypeMap.getString("SVC_KEI_STAT");

			if (isExcludeDomain(domains, strReksMlad))
			{
				super.logPrint.printDebugLog("携帯ドメインチェック:マンション申込完了:紹介コード:" + strIntrCd + JFUStrConst.HALF_COLON);

				// 紹介スキーマより取得したメールアドレスのドメインが携帯電話ドメインか判定する。

				// 携帯電話ドメインでなければ、紹介者フィードバックメール送信対象とする
				// 携帯電話ドメインであれば、紹介者フィードバックメール送信対象外として、次の処理へ移る。

				updateNoSendMail(strIntrCd);
				continue;
			}

			ArrayList<String> resutList = checkMailAddress(strReksMlad);
			String mailSendYouhi = resutList.get(0);
			String caseCreate = resutList.get(0);

			if (JFUStrConst.S_MAIL_SEND_YOUHI_1.equals(mailSendYouhi) && JFUStrConst.S_CASE_CREATE_1.equals(caseCreate))
			{
				super.logPrint.printDebugLog("メール／CASEチェックエラー:" + logMsgTitle + ":紹介コード:" + strIntrCd + JFUStrConst.HALF_COLON);
				updateNoSendMail(strIntrCd);
				continue;
			}

			if (JFUStrConst.CD00037_010.equals(strSvcKeiStat))
			{
				// 照査済、締結済を送信対象とするため、次の処理へ移る。
				continue;
			}
			else if (JFUStrConst.CD00037_100.equals(strSvcKeiStat) || JFUStrConst.CD00037_910.equals(strSvcKeiStat)
					|| JFUStrConst.CD00037_920.equals(strSvcKeiStat))
			{
				// サービス提供中、解約済、キャンセル済になった時点で、マンションタイプ完了通知メール送信対象外として次の処理へ移る。
				updateNoSendMail(strIntrCd);
				continue;
			}

			if (JFUBatCommon.isNotNullCheck(strIntrCd) && strIntrCd.equals(duplicationIntrCd))
			{
				// 重複チェックを行い前処理と同じ場合は、次の繰り返し処理へ移る。

				super.logPrint.printDebugLog("重複のため、スキップ:" + logMsgTitle + ":紹介コード:" + strIntrCd + JFUStrConst.HALF_COLON);
				continue;
			}

			duplicationIntrCd = strIntrCd;

			if (JFUStrConst.S_MAIL_SEND_YOUHI_0.equals(mailSendYouhi))
			{
				ArrayList<String> mlSendList = new ArrayList<String>();
				mlSendList.add(JFUStrConst.MAILCD_FEEDBACK_MSKM);
				mlSendList.add(JFUStrConst.EMPTY);
				mlSendList.add(strReksMlad);
				mlSendList.add(strShokaiNm);
				mlSendList.add(strIntrCd);
// ANK-3421-00-00 ADD START
// ANK-4427-00-00 MOD START
				mlSendList.add(JFUStrConst.MAIL_DTL_CD_FUD1000087);
// ANK-4427-00-00 MOD END
// ANK-3421-00-00 ADD END

				// メール送信サービス呼出メソッドへパラメータを引き渡す
				String result = makeSendMailInfo(mlSendList, strSvcKeiNo);

				JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
				dbList.setValue(sysDateTimeStamp); // 申込通知メール送信年月日時分秒

				// 紹介テーブルの更新
				if (!JFUStrConst.S_MAIL_SEND_RESULT_0.equals(result))
				{
					dbList.setValue(JFUStrConst.S_ML_SEND_CD_2); // 申込メール送信コード
					dbList.setValue(strIntrCd); // 紹介コード
					executeKK_T_INTR_FU_UPDATE_001(dbList.getList().toArray());
					continue;
				}

				dbList.setValue(JFUStrConst.S_ML_SEND_CD_1); // 申込メール送信コード
				dbList.setValue(strIntrCd); // 紹介コード
				executeKK_T_INTR_FU_UPDATE_001(dbList.getList().toArray());

				iMansionMskmMailCnt++;
				iMailCnt++;
			}
			else
			{
				updateNoSendMail(strIntrCd);
			}

			if (JFUStrConst.S_CASE_CREATE_0.equals(caseCreate))
			{
				// CASECSVファイル作成
				strCaseList[0] = strFreeParam1;
				strCaseList[1] = strIntrSvcKeiNo;
				strCaseList[2] = strIntrCd;
				strCaseList[3] = JFUStrConst.S_CANCEL_FLG_0;
				strCaseList[4] = strMskmsho_No;
				strCaseList[5] = strBnchigo;
				strCaseList[6] = strSysDateTime;

				strCaseFileList.add(strCaseList.clone());

				iCaseMansionMskmCnt++;
				iCaseAllCnt++;
			}
		}

		ArrayList<String> cntSummryMail = new ArrayList<String>();
		cntSummryMail.add(JFUStrConst.MAILCD_SENDCOMP_MAIL);
		cntSummryMail.add(JFUStrConst.EMPTY);
		cntSummryMail.add(JBSbatAplConst.getAplConstValue(JFUStrConst.FU_COMPMAIL_MLAD_TO));
		cntSummryMail.add(JFUStrConst.EMPTY);
		cntSummryMail.add(String.valueOf(iMailCnt));
// ANK-3421-00-00 ADD START
		cntSummryMail.add(JFUStrConst.EMPTY);
// ANK-3421-00-00 ADD END

		// メール送信サービス呼出メソッドへパラメータを引き渡す
		makeSendMailInfo(cntSummryMail, MAIL_SEND_ERR);

		// CASECSVファイル出力用レコードが存在するか判定
		if (strCaseFileList.size() != 0)
		{
			// CASEファイル生成オブジェクト初期化
			strFreeParam1 = strFreeParam1.replace(FILE_NM_TIMESTAMP, strSysDateTime);
			JBSbatBusinessFileUtil obj1 =
					JFUBatCommon.createBusinessFileUtil(strFreeParam1, JFUStrConst.SJIS, JFUStrConst.S_LINE_SEPARAOR_LF, JFUStrConst.S_SEP_CAM);

			for (int i = 0; i < strCaseFileList.size(); i++)
			{
				// CASECSVファイル作成
				ArrayList<String> caseFileList =
						createCaseCsvFile(strCaseFileList.get(i)[0], strCaseFileList.get(i)[1], strCaseFileList.get(i)[2], strCaseFileList.get(i)[3],
								strCaseFileList.get(i)[4], strCaseFileList.get(i)[5], strCaseFileList.get(i)[6]);
				JFUBatCommon.printBusinessFileUtil(obj1, caseFileList);
			}
			JFUBatCommon.closeBusinessFileUtil(obj1);

			// CASE件数ファイルとCASEフラグファイルの作成
			createotherFile(strFreeParam2, strFreeParam3, strSysDateTime, iCaseAllCnt);
		}

		super.logPrint.printBusinessErrorLog(EFUB0120AI, new String[] { CASE_MSG_1, String.valueOf(iCaseAllCnt) });
		super.logPrint.printBusinessErrorLog(EFUB0120AI, new String[] { CASE_MSG_2, String.valueOf(iCaseHomeMskmCnt) });
		super.logPrint.printBusinessErrorLog(EFUB0120AI, new String[] { CASE_MSG_3, String.valueOf(iCaseHomeCancelCnt) });
		super.logPrint.printBusinessErrorLog(EFUB0120AI, new String[] { CASE_MSG_4, String.valueOf(iCaseMezonMskmCnt) });
		super.logPrint.printBusinessErrorLog(EFUB0120AI, new String[] { CASE_MSG_5, String.valueOf(iCaseMansionMskmCnt) });
		super.logPrint.printBusinessErrorLog(EFUB0130AI, new String[] { MAIL_MSG_1, String.valueOf(iHomeMskmMailCnt) });
		super.logPrint.printBusinessErrorLog(EFUB0130AI, new String[] { MAIL_MSG_2, String.valueOf(iHomeCancelMailCnt) });
		super.logPrint.printBusinessErrorLog(EFUB0130AI, new String[] { MAIL_MSG_3, String.valueOf(iMezonMskmMailCnt) });
		super.logPrint.printBusinessErrorLog(EFUB0130AI, new String[] { MAIL_MSG_4, String.valueOf(iMansionMskmMailCnt) });
		super.logPrint.printBusinessErrorLog(EFUB0130AI, new String[] { MAIL_MSG_5, String.valueOf(iMailCnt) });

		return null;
		/** ▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲ */
	}

	/**
	 * 業務サービス終了処理
	 *
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
		/** ▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼ */
		/** ▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼ */
		// DBアクセスクラスをクローズします
		db_KK_T_MSKM_DTL.close();
		db_KU_T_KOJI_STEP_PRG.close();
		db_KK_T_INTR.close();
		db_CC_M_MAIL.close();
		/** ▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲ */
		/** ▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲ */
	}

	/** ▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼ */

	/**
	 * SQLKEY(FU_SELECT_001)で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_MSKM_DTL_FU_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_MSKM_DTL.selectBySqlDefine(paramList, KK_T_MSKM_DTL_FU_SELECT_001);
	}

	/**
	 * SQLKEY(FU_SELECT_002)で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_MSKM_DTL_FU_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_MSKM_DTL.selectBySqlDefine(paramList, KK_T_MSKM_DTL_FU_SELECT_002);
	}

	/**
	 * SQLKEY(FU_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 executeKK_T_MSKM_DTL_FU_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_MSKM_DTL.selectBySqlDefine(paramList, KK_T_MSKM_DTL_FU_SELECT_003);
	}

	/**
	 * SQLKEY(FU_SELECT_004)で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_MSKM_DTL_FU_SELECT_004(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_MSKM_DTL.selectBySqlDefine(paramList, KK_T_MSKM_DTL_FU_SELECT_004);
	}

	/**
	 * SQLKEY(FU_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 *
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	申込明細番号
	 *		 	申込明細_工事案件適用開始年月日
	 *		 	工事工程進捗年月日
	 * </pre>
	 * <p>
	 *
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKU_T_KOJI_STEP_PRG_FU_SELECT_001(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());
		paramList.setValue(param[4].toString());
		paramList.setValue(param[5].toString());
		paramList.setValue(param[6].toString());

		// DBアクセスを実行します
		db_KU_T_KOJI_STEP_PRG.selectBySqlDefine(paramList, KU_T_KOJI_STEP_PRG_FU_SELECT_001);
	}

	/**
	 * SQLKEY(FU_UPDATE_001)で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_INTR_FU_UPDATE_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_T_INTR.executeBySqlDefine(paramList, KK_T_INTR_FU_UPDATE_001);
	}

	/**
	 * SQLKEY(FU_UPDATE_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 *
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	CANCEL_TCH_ML_SEND
	 *		 	キャンセルメール送信コード
	 *		 	紹介コード
	 * </pre>
	 * <p>
	 *
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_INTR_FU_UPDATE_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_T_INTR.executeBySqlDefine(paramList, KK_T_INTR_FU_UPDATE_002);
	}

	/**
	 * SQLKEY(FU_UPDATE_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 executeKK_T_INTR_FU_UPDATE_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_INTR.executeBySqlDefine(paramList, KK_T_INTR_FU_UPDATE_003);
	}

	/**
	 * SQLKEY(FU_UPDATE_002)で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_INTR_FU_UPDATE_004(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_INTR.executeBySqlDefine(paramList, KK_T_INTR_FU_UPDATE_004);
	}

	/**
	 * SQLKEY(FU_SELECT_001)で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_FU_SELECT_001(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_CC_M_MAIL.selectBySqlDefine(paramList, CC_M_MAIL_FU_SELECT_001);
	}

	/** ▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲ */

	/**
	 * メールアドレスの整合性チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 *
	 * <pre>
	 * 1.パラメータを@で分割し、ローカルとドメインを切り分けます。<br>
	 *
	 * 2.判定結果より紹介者フィードバックメールの送信要否、CASEファイル作成要否を判定します。<br>
	 *
	 * </pre>
	 * <p>
	 *
	 * @param strReksMlad メールアドレス。
	 * @return arrayList 1.紹介者フィードバックメールの送信要否(0:送信する、1:送信しない)、2.CASEファイルの作成要否(0:作成する、1:作成しない)
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private static ArrayList<String> checkMailAddress(String strReksMlad) throws Exception
	{

		// 戻り値の返却格納LISTを初期化
		ArrayList<String> resultList = new ArrayList<String>();

		// メールアドレスがnullである際の判定
		if (strReksMlad == null)
		{
			resultList.add(JFUStrConst.S_MAIL_SEND_YOUHI_1);
			resultList.add(JFUStrConst.S_CASE_CREATE_1);

			return resultList;
		}

		// メールアドレスをローカルとドメインに分割する
		String[] strCutMailAdd = strReksMlad.split(JFUStrConst.S_ATT_MARK);

		// ローカルに使用不可半角記号を含む判定
		if (strCutMailAdd[0].matches(".*[()<>,;:].*"))
		{
			resultList.add(JFUStrConst.S_MAIL_SEND_YOUHI_1);
			resultList.add(JFUStrConst.S_CASE_CREATE_0);

			return resultList;
		}

		// ローカルに半角記号、半角カナを含む判定
		if (strCutMailAdd[0].matches(".*[。-゜].*"))
		{
			resultList.add(JFUStrConst.S_MAIL_SEND_YOUHI_1);
			resultList.add(JFUStrConst.S_CASE_CREATE_0);

			return resultList;
		}

		// ローカルの始まりにピリオドを含む判定
		if (strCutMailAdd[0].matches("^\\..*"))
		{
			resultList.add(JFUStrConst.S_MAIL_SEND_YOUHI_0);
			resultList.add(JFUStrConst.S_CASE_CREATE_0);

			return resultList;
		}

		// ローカルの終わりにピリオドを含む判定
		if (strCutMailAdd[0].matches(".*\\.$"))
		{
			resultList.add(JFUStrConst.S_MAIL_SEND_YOUHI_0);
			resultList.add(JFUStrConst.S_CASE_CREATE_0);

			return resultList;
		}

		// ローカルに連続ピリオドを含む判定
		if (strCutMailAdd[0].matches(".*[\\.\\.].*"))
		{
			resultList.add(JFUStrConst.S_MAIL_SEND_YOUHI_0);
			resultList.add(JFUStrConst.S_CASE_CREATE_0);

			return resultList;
		}

		// ドメインに使用不可半角記号を含む判定
		if (strCutMailAdd[1].matches(".*[()<>,;:].*"))
		{
			resultList.add(JFUStrConst.S_MAIL_SEND_YOUHI_1);
			resultList.add(JFUStrConst.S_CASE_CREATE_0);

			return resultList;
		}

		// ドメインに半角カナを含む判定
		if (strCutMailAdd[1].matches(".*[。-゜].*"))
		{
			resultList.add(JFUStrConst.S_MAIL_SEND_YOUHI_1);
			resultList.add(JFUStrConst.S_CASE_CREATE_0);

			return resultList;
		}

		// ドメインの始まりにピリオドを含む判定
		if (strCutMailAdd[1].matches("^\\..*"))
		{
			resultList.add(JFUStrConst.S_MAIL_SEND_YOUHI_1);
			resultList.add(JFUStrConst.S_CASE_CREATE_0);

			return resultList;
		}

		// ドメインの終わりにピリオドを含む判定
		if (strCutMailAdd[1].matches(".*\\.$"))
		{
			resultList.add(JFUStrConst.S_MAIL_SEND_YOUHI_0);
			resultList.add(JFUStrConst.S_CASE_CREATE_0);

			return resultList;
		}

		// ドメインに連続ピリオドを含む判定
		if (strCutMailAdd[1].matches(".*(\\.\\.).*"))
		{
			resultList.add(JFUStrConst.S_MAIL_SEND_YOUHI_1);
			resultList.add(JFUStrConst.S_CASE_CREATE_0);

			return resultList;
		}

		// メールアドレスに@が無い場合の判定(ドメインLISTがNULL)
		if (JFUStrConst.EMPTY.equals(strCutMailAdd[1]))
		{
			resultList.add(JFUStrConst.S_MAIL_SEND_YOUHI_1);
			resultList.add(JFUStrConst.S_CASE_CREATE_0);

			return resultList;
		}

		// メールアドレスに@が複数存在する場合の判定(LISTが3つ存在する)
		if (3 <= strCutMailAdd.length)
		{
			resultList.add(JFUStrConst.S_MAIL_SEND_YOUHI_1);
			resultList.add(JFUStrConst.S_CASE_CREATE_1);

			return resultList;
		}

		// ローカルに空白を含む判定
		if (strCutMailAdd[0].matches(".*[\\s].*"))
		{
			resultList.add(JFUStrConst.S_MAIL_SEND_YOUHI_1);
			resultList.add(JFUStrConst.S_CASE_CREATE_1);

			return resultList;
		}

		// ドメインに空白を含む判定
		if (strCutMailAdd[1].matches(".*[\\s].*"))
		{
			resultList.add(JFUStrConst.S_MAIL_SEND_YOUHI_1);
			resultList.add(JFUStrConst.S_CASE_CREATE_1);

			return resultList;
		}

		resultList.add(JFUStrConst.S_MAIL_SEND_YOUHI_0);
		resultList.add(JFUStrConst.S_CASE_CREATE_0);
		return resultList;
	}

	/**
	 * メール送信サービスを呼び出しします。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 *
	 * <pre>
	 * 1.引数にて送信先メールアドレス,メール本文を受け取る。<br>
	 *
	 * 2.引数と送信先メールアドレス,メール本文をもとに
	 *   メール送信部品用パラメータを作成し返却する。<br>
	 *
	 * </pre>
	 * <p>
	 *
	 * @param mLSendList ECC0021D010 メール送信SVIFパラメータリスト
	 * @return sendMailInfo mailScResult メール送信結果フラグ
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String makeSendMailInfo(ArrayList<String> mLSendList, String strSvcKeiNo) throws Exception, JBSbatBusinessError
	{
		// サービス呼び出し
		// サービスIDをparamにセット
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, SERVICE_ID);

		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// メールコードを変数へ退避
		String mailCd = mLSendList.get(0);

		// 機能コード「1」を設定
		parentMap.put("func_code", "1");

		// メール送信サービス呼出時のinMapを生成、NULLを設定する項目は、マッピングしない

		// メールコード
		parentMap.put("mail_cd", mailCd);

		// 送信元アドレス
		parentMap.put("sendm_mlad", mLSendList.get(1));

		// 送信先一覧明細
		ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();

		// 送信先アドレス(TO)
		HashMap<String, String> sendMap = new HashMap<String, String>();

		sendMap.put("mlad", mLSendList.get(2));
		sendMap.put("mlad_set_field_cd", "01");

		list.add(sendMap);

		parentMap.put("ECC0021D010CBSMsg1List", list);

		// 非定型文字列一覧明細
		ArrayList<HashMap<String, String>> list2 = new ArrayList<HashMap<String, String>>();

		// メールコードを設定
		if (JFUStrConst.MAILCD_FEEDBACK_MSKM.equals(mailCd) || JFUStrConst.MAILCD_FEEDBACK_CANCEL.equals(mailCd))
		{
			HashMap<String, String> hiteikeiMap1 = new HashMap<String, String>();

			// 本文非定型置換文字 %の数だけリストにHashMapを設定する。
			hiteikeiMap1.put("text_htk_ckam_moji", mLSendList.get(3));
			list2.add(hiteikeiMap1); // 置換文字1

			HashMap<String, String> hiteikeiMap2 = new HashMap<String, String>();
			hiteikeiMap2.put("text_htk_ckam_moji", mLSendList.get(4));

			list2.add(hiteikeiMap2); // 置換文字2

// ANK-3057-00-00 DEL START
//			HashMap<String, String> hiteikeiMap3 = new HashMap<String, String>();
//
//			// APLConstより、URLを取得する。
//			String urlWeb = JFUBatCommon.getApplicationConst(ML_URL_WEB);
//
//			hiteikeiMap3.put("text_htk_ckam_moji", urlWeb);
//
//			list2.add(hiteikeiMap3); // 置換文字3
// ANK-3057-00-00 DEL END
		}
		else if (JFUStrConst.MAILCD_SENDCOMP_MAIL.equals(mailCd))
		{

			HashMap<String, String> hiteikeiMap = new HashMap<String, String>();

			// 本文非定型置換文字
			hiteikeiMap.put("text_htk_ckam_moji", mLSendList.get(4));
			list2.add(hiteikeiMap);

		}

		parentMap.put("ECC0021D010CBSMsg2List", list2);

		// マッピングを行わないため、空のリストを設定
		parentMap.put("ECC0021D010CBSMsg3List", new ArrayList<HashMap<String, String>>());
// ANK-3421-00-00 MOD START
		ArrayList<HashMap<String, String>> list4 = new ArrayList<HashMap<String, String>>();
		// メール明細コードを変数へ退避
		String mailDtlCd = mLSendList.get(5);
		// メール明細コードが設定されている場合のみ、ECC0021D010CBSMsg4Listに値設定
		if (!JFUStrConst.EMPTY.equals(mailDtlCd))
		{
			HashMap<String, String> list4Map = new HashMap<String, String>();
			list4Map.put("mail_dtl_cd", mailDtlCd);
			list4Map.put("dtl_text_htk_ckam_moji", JFUStrConst.EMPTY);
			list4.add(list4Map);
		}
		parentMap.put("ECC0021D010CBSMsg4List", list4);
// ANK-3421-00-00 MOD END

		// 非定型文字列一覧明細
		/** 管理者通知メールのみSubjectを設定 */
		if (JFUStrConst.MAILCD_SENDCOMP_MAIL.equals(mailCd))
		{
			JBSbatCommonDBInterface ccMailDbList = new JBSbatCommonDBInterface();

			// メールマスタ取得処理
			ccMailDbList.setValue(JFUStrConst.MAILCD_SENDCOMP_MAIL);
			ccMailDbList.setValue(super.opeDate);
			ccMailDbList.setValue(super.opeDate);
			ccMailDbList.setValue(super.opeDate);
			executeCC_M_MAIL_FU_SELECT_001(ccMailDbList.getList().toArray());
			String mailTitle = JFUStrConst.EMPTY;
			for (JBSbatCommonDBInterface ccMMailMap = db_CC_M_MAIL.selectNext(); null != ccMMailMap; ccMMailMap = db_CC_M_MAIL.selectNext())
			{
				mailTitle = ccMMailMap.getString("MAIL_TITLE");
			}

			// メールマスタより取得したTITLEの置換文字列(%)をメール送信件数で置換
			mailTitle = mailTitle.replace("%", mLSendList.get(4));

			ArrayList<HashMap<String, String>> list3 = new ArrayList<HashMap<String, String>>();

			// メールヘッダーキー(Subject)を設定してメール送信時にメールマスタを無視してメールヘッダーを流し込む
			HashMap<String, String> map = new HashMap<String, String>();
			map.put("mail_header_key", MAIL_HEADER_KEY);
			map.put("mail_header_value", mailTitle);
			list3.add(map);
			parentMap.put("ECC0021D010CBSMsg5List", list3);
		}
		else
		{
			// 管理者通知以外の場合は、メールマスタに従い送信する。(値を設定しない)
			parentMap.put("ECC0021D010CBSMsg5List", new ArrayList<HashMap<String, String>>());
		}

		inputMap.put(SC_NAME, parentMap);

		try
		{
			// サービス呼び出し
			JFUBatCommon.invokeService(super.commonItem, paramMap, inputMap, outputMap);
		}
		catch (JCCbatFrameworkException jfe)
		{
			super.logPrint.printBusinessErrorLog(EFUB0180KE, new String[] { "紹介者フィードバックメール送信" });
			super.logPrint.printBusinessErrorLog(EFUB0220KE, new String[] { "サービス契約番号", strSvcKeiNo });
			commonItem.addErrorCount(1);
			throw new JBSbatBusinessError();
		}
		catch (Exception e)
		{
			super.logPrint.printBusinessErrorLog(EFUB0180KE, new String[] { "紹介者フィードバックメール送信" });
			commonItem.addErrorCount(1);
			throw new JBSbatBusinessError();
		}

		// メール送信情報登録SCの処理結果を取得
		HashMap<String, Object> resultMapSc01 = (HashMap<String, Object>)outputMap.get(SC_NAME);
		String mailScResult = (String)resultMapSc01.get("mail_send_err_flg");

		// SC処理結果がエラーの場合、警告終了。
		if (!"0".equals(mailScResult))
		{
			super.logPrint.printBusinessErrorLog(EFUB0160JW, new String[] { (String)resultMapSc01.get("mail_send_no") });
		}

		return mailScResult;
	}

	/**
	 * CASECSVファイルの出力を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 *
	 * <pre>
	 * 1.引数で出力ファイル名(フルパス)を設定します。<br>
	 *
	 * 2.引数をもとに処理結果ファイル(異常)を出力します。<br>
	 *
	 * </pre>
	 * <p>
	 *
	 * @param strFreeParam1 ファイル名。
	 * @param strSvcKeiNo サービス契約番号。
	 * @param strIntrCd 紹介コード。
	 * @param strCancelFlg キャンセルフラグ。
	 * @param strMskmsho_No 申込書番号。
	 * @param strBnchigo 番地号
	 * @param strSysDateTime
	 * @return
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private static ArrayList<String> createCaseCsvFile(String strFreeParam1, String strSvcKeiNo, String strIntrCd, String strCancelFlg,
			String strMskmsho_No, String strBnchigo, String strSysDateTime) throws Exception
	{
		// 住所編集部品戻り値格納List
		String[] jyusyoEditList = JFUBatCommon.jyusyoEditPtn12(strBnchigo);
		// CASEファイル1レコード分を編集
		ArrayList<String> caselist = new ArrayList<String>();
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_CK_TYPE + JFUStrConst.S_DUBLLEQ); // 顧客タイプ
		caselist.add(JFUStrConst.S_DUBLLEQ + strSvcKeiNo + JFUStrConst.S_DUBLLEQ); // お客様ID
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // 顧客氏名
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // 顧客氏名(カナ)
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // 電話番号1
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // 電話番号2
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // 郵便番号
		if (3 <= jyusyoEditList.length)
		{
			caselist.add(JFUStrConst.S_DUBLLEQ + jyusyoEditList[0] + JFUStrConst.S_DUBLLEQ); // 住所1
			caselist.add(JFUStrConst.S_DUBLLEQ + jyusyoEditList[1] + JFUStrConst.S_DUBLLEQ); // 住所2
			caselist.add(JFUStrConst.S_DUBLLEQ + jyusyoEditList[2] + JFUStrConst.S_DUBLLEQ); // 住所3
		}
		else if (2 == jyusyoEditList.length)
		{
			caselist.add(JFUStrConst.S_DUBLLEQ + jyusyoEditList[0] + JFUStrConst.S_DUBLLEQ); // 住所1
			caselist.add(JFUStrConst.S_DUBLLEQ + jyusyoEditList[1] + JFUStrConst.S_DUBLLEQ); // 住所2
			caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // 住所3
		}
		else if (1 == jyusyoEditList.length)
		{
			caselist.add(JFUStrConst.S_DUBLLEQ + jyusyoEditList[0] + JFUStrConst.S_DUBLLEQ); // 住所1
			caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // 住所2
			caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // 住所3
		}
		else
		{
			caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // 住所1
			caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // 住所2
			caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // 住所3
		}
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // 性別
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // 生年月日
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_JYOUTAI + JFUStrConst.S_DUBLLEQ); // 状態
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_STATUS + JFUStrConst.S_DUBLLEQ); // ステータス
		caselist.add(JFUStrConst.S_DUBLLEQ + strSysDateTime.substring(0, 4) + JFUStrConst.SLASH + strSysDateTime.substring(4, 6) + JFUStrConst.SLASH
				+ strSysDateTime.substring(6, 8) + JFUStrConst.HALF_SPACE + strSysDateTime.substring(8, 10) + JFUStrConst.HALF_COLON
				+ strSysDateTime.substring(10, 12) + JFUStrConst.HALF_COLON + strSysDateTime.substring(12, 14) + JFUStrConst.S_DUBLLEQ); // 作成日時
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_TANTOU + JFUStrConst.S_DUBLLEQ); // 受付者
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_TANTOU + JFUStrConst.S_DUBLLEQ); // 担当者
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // キュー名
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_UKETSUKE + JFUStrConst.S_DUBLLEQ); // 受付種別
		caselist.add(JFUStrConst.S_DUBLLEQ + strIntrCd + JFUStrConst.S_CATEGORY4 + JFUStrConst.S_DUBLLEQ); // タイトル
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_CATEGORY1 + JFUStrConst.S_DUBLLEQ); // カテゴリ1
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_CATEGORY2 + JFUStrConst.S_DUBLLEQ); // カテゴリ2
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_CATEGORY3 + JFUStrConst.S_DUBLLEQ); // カテゴリ3
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_CATEGORY4 + JFUStrConst.S_DUBLLEQ); // カテゴリ4
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // カテゴリ5
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // カテゴリ6
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // カテゴリ7
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // カテゴリ8
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // カテゴリ9
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // カテゴリ10
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // カテゴリ11
		if (JFUStrConst.S_CANCEL_FLG_0.equals(strCancelFlg))
		{
			caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_MSKM_NO + strMskmsho_No + JFUStrConst.S_MSKM + JFUStrConst.S_DUBLLEQ);
		}
		else
		{
			caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_MSKM_NO + strMskmsho_No + JFUStrConst.S_CANCEL + JFUStrConst.S_DUBLLEQ);
		}
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // 問合せ客ID
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // eoID
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // 申込書番号
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // エスカレーション日時
		caselist.add(JFUStrConst.S_DUBLLEQ + JFUStrConst.S_DUBLLEQ); // コールバック時間指定タイプ

		return caselist;
	}

	/**
	 * CASE件数ファイルとCASEフラグファイルの出力を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 *
	 * <pre>
	 * 1.引数で出力ファイル名(フルパス)を設定します。<br>
	 *
	 * 2.引数をもとに処理結果ファイル(異常)を出力します。<br>
	 *
	 * </pre>
	 * <p>
	 *
	 * @param strFreeParam2 CASE件数ファイル。
	 * @param strFreeParam3 CASEフラグファイル。
	 * @param strSysDateTime システム日付。
	 * @param intMapCnt CASECSVファイル出力件数。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private static void createotherFile(String strFreeParam2, String strFreeParam3, String strSysDateTime, int intMapCnt) throws IOException,
			Exception
	{
		// 契約サービスマスタ連携件数ファイル出力
		ArrayList<String> strRecCntList = new ArrayList<String>(); // ファイル出力レコード格納用
		strRecCntList.add(String.valueOf(intMapCnt));
		String strCntFileName = strFreeParam2.replace(FILE_NM_TIMESTAMP, strSysDateTime);
		JBSbatBusinessFileUtil obj2 =
				JFUBatCommon.createBusinessFileUtil(strCntFileName, JFUStrConst.SJIS, JFUStrConst.S_LINE_SEPARAOR_LF, JFUStrConst.S_DELIM_TAB);
		JFUBatCommon.printBusinessFileUtil(obj2, strRecCntList);
		if (null != obj2)
		{
			JFUBatCommon.closeBusinessFileUtil(obj2);
		}

		// FTPフラグファイル出力
		String strFtpFileName = strFreeParam3.replace(FILE_NM_TIMESTAMP, strSysDateTime);
		JBSbatBusinessFileUtil obj3 =
				JFUBatCommon.createBusinessFileUtil(strFtpFileName, JFUStrConst.SJIS, JFUStrConst.S_LINE_SEPARAOR_LF, JFUStrConst.S_DELIM_TAB);
		if (null != obj3)
		{
			JFUBatCommon.closeBusinessFileUtil(obj3);
		}
	}

	/**
	 *
	 * 各受付完了メール対象外更新処理
	 *
	 * @param intrCd 紹介者コード
	 * @throws Exception 例外
	 */
	private void updateNoSendMail(String intrCd) throws Exception
	{
		JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
		dbList.setValue(JFUStrConst.S_ML_SEND_CD_2); // 申込メール送信コード
		dbList.setValue(intrCd); // 紹介コード
		executeKK_T_INTR_FU_UPDATE_003(dbList.getList().toArray());
	}

	/**
	 *
	 * キャンセルメール対象外更新処理
	 *
	 * @param intrCd 紹介者コード
	 * @throws Exception 例外
	 */
	private void updateNoSendCancelMail(String intrCd) throws Exception
	{
		JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
		dbList.setValue(JFUStrConst.S_ML_SEND_CD_2); // 申込メール送信コード
		dbList.setValue(intrCd); // 紹介コード
		executeKK_T_INTR_FU_UPDATE_004(dbList.getList().toArray());
	}

	/**
	 * キャンセルフラグ取得処理
	 *
	 * 工事工程進捗スキーマのキャンセルフラグを取得する。
	 *
	 * @param opedate 運用日付
	 * @param mskmDtlNo 申込明細番号
	 * @return キャンセルフラグ
	 * @throws Exception 例外
	 */
	private String getCancelFlg(String opedate, String mskmDtlNo) throws Exception
	{
		// 工事工程進捗情報取得結果格納領域を生成する
		JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();

		// 取得した申込明細番号を使用し、工事工程進捗情報を取得する
		dbList.setValue(mskmDtlNo);
		dbList.setValue(opedate);
		dbList.setValue(mskmDtlNo);
		dbList.setValue(opedate);
		dbList.setValue(mskmDtlNo);
		dbList.setValue(opedate);
		dbList.setValue(mskmDtlNo);
		executeKU_T_KOJI_STEP_PRG_FU_SELECT_001(dbList.getList().toArray());

		String cancelFlg = null; // 工事工程のキャンセルフラグ格納用変数

		// 取得したレコードを先頭1件読込み
		JBSbatCommonDBInterface kojiStepPrgMap = db_KU_T_KOJI_STEP_PRG.selectNext();
		if (null != kojiStepPrgMap)
		{
			cancelFlg = kojiStepPrgMap.getString("CANCEL_FLG");
		}
		return cancelFlg;
	}

	/**
	 * 処理対象外ドメインチェック
	 *
	 * @param excludeArray 対象外ドメインリスト
	 * @param mlad メールアドレス
	 * @return チェック結果 true 処理対象外、処理対象
	 */
	private boolean isExcludeDomain(String[] excludeArray, String mlad)
	{
		if (!JFUBatCommon.isNotNullCheck(mlad))
		{
			return true;
		}

		// メールアドレスを「@」にて分割し、「@」以降の値が携帯電話ドメインか判定する。
		String[] mladDomain = mlad.split(JFUStrConst.S_ATT_MARK);

		if (mladDomain.length < 2)
		{
			return true;
		}

		for (int i = 0; i < excludeArray.length; i++)
		{
			String excludeStr = excludeArray[i];
			if (JFUBatCommon.isNotNullCheck(excludeStr))
			{
				if (excludeStr.equals(mladDomain[1]))
				{
					// 携帯電話ドメインの為、処理対象外としてtrueを返却する。
					return true;
				}
			}
		}
		return false;
	}
}
