/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCNLLCallCkiMriyoKkaEdt
*	ソースファイル名	：JBSbatCNLLCallCkiMriyoKkaEdt.java
*	作成者				：富士通　
*	作成日				：2015年10月20日
*＜機能概要＞
*　LaLaCall未利用者強制解約（長期未利用）部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v20.0.0		2015/10/20	FJ山裾		【ANK-2465-00-00】
*	v20.0.1		2015/11/08	FJ山裾		【ST-2015-0000060】（サービス連携する際の電文：更新年月日を、コンテンツ契約スキーマの値から設定するように修正）
*
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.common.JCNBatCheckUtil;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatCNIFM009001;
import eo.business.util.file.JBSbatCNIFM009002;
import eo.business.util.table.JBSbatCN_T_CONT_KEI;
import eo.business.util.table.JBSbatCN_T_CONT_KEI_UCWK;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JCCBatchEsbInterface;

/**
 * (クラスの機能概要)
 * <p>
 *<BR>
 * 
 * @author 富士通
 */
public class JBSbatCNLLCallCkiMriyoKkaEdt extends JBSbatBusinessService
{
	/** ▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼ */
	
	/** テーブル(コンテンツ契約内訳) */
	private static final String D_TBL_NAME_CN_T_CONT_KEI_UCWK = "CN_T_CONT_KEI_UCWK";
	
	/** SQL定義キー(CN_SELECT_003) */
	private static final String CN_T_CONT_KEI_UCWK_CN_SELECT_003 = "CN_SELECT_003";
	
	/** テーブルアクセスクラス(コンテンツ契約内訳)*/
	private JBSbatSQLAccess db_CN_T_CONT_KEI_UCWK = null;
	
	// 2015/11/08 ST-2015-0000060 Add Start
	/** テーブル(コンテンツ契約) */
	private static final String D_TBL_NAME_CN_T_CONT_KEI = "CN_T_CONT_KEI";
	
	/** SQL定義キー(CN_SELECT_015) */
	private static final String CN_T_CONT_KEI_CN_SELECT_015 = "CN_SELECT_015";
	
	/** テーブルアクセスクラス(コンテンツ契約)*/
	private JBSbatSQLAccess db_CN_T_CONT_KEI = null;
	// 2015/11/08 ST-2015-0000060 Add End
	/** ▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲ */

	/** エラーメッセージ（データ存在エラー）*/
	private static final String NO_DATA_MSG = "該当の契約が存在しません";
	/** エラーメッセージ（状態変更）*/
	private static final String CHG_STS_MSG = "契約の状態が変わっています（XXX）";
	
	// 2015/11/08 ST-2015-0000060 Add Start
	/** エラーメッセージ（ｅｏ基幹内エラー）*/
	private static final String EO_KIKAN_ERR = "ｅｏ基幹内エラー";
	// 2015/11/08 ST-2015-0000060 Add End
	
	/** 置き換え文字 */
	private static final String REPLACE_CHAR = "XXX";
	/** コンテンツ契約ステータス_100 */
	private static final String CONT_KEI_STAT_100 = "100";
	/** ユースケースID 強制解約 */
	private static final String USECASE_ID_CNSV0007 = "CNSV0007";
	/** ファンクションコード */
	private static final String FUNC_CD = "1";
	/** 更新者ID */
	private static final String UPD_USER_ID = "CNPRC03001";
	/** 更新者 */
	private static final String UPD_USER = "LaLaCall未利用者強制解約";
	/** メール送信フラグ */
	private static final String MAIL_SEND_FLG = "1";
	/** サービスIFのリターンコード(正常) */
	private static final String RETURN_CODE_SUCCESS = "0000";
	/** CCMG通信成功 */
	private static final String CCMG_TERM_OK = "成功";
	/** CCMG通信失敗 */
	private static final String CCMG_TERM_NG = "失敗";
	/** 編集項目（ハイフン） */
	private static final String HIFUN = "−";
	/** ヘッダ項目（接続成功/失敗） */
	private static final String HEADER_TERMOK_NG = "接続成功/失敗";
	/** ヘッダ項目（HTTPリターン） */
	private static final String HEADER_HTTP_RETURN = "HTTPリターン";
	/** ヘッダ項目（HTTPリターンコード内容） */
	private static final String HEADER_HTTP_RETURN_INFO = "HTTPリターンコード内容";
	
	/** 解約対象リスト（長期未利用）結果ファイル */
	private String dslTrgtListMriyoFile = null;
	
	/** 解約対象リスト（長期未利用）ファイル入力件数 */
	private int dslTrgtListMriyoInputCnt = 0;
	
	/** 改行コード */
	private static final String CRLF  = "CR+LF";
	/** 文字コード */
	private static final String MS932  = "MS932";
	
	/** 業務パラメータマップ */
	HashMap<String, Object> mWorkParamMap = null;
	/** 外部インターフェースファイルオブジェクト */
	private JBSbatOutputFileUtil outPutFile = null;
	
	/** エラーコード設定用マップ */
	private static final HashMap<String, Object> mErrCodeMap = new HashMap<String, Object>();
	/** エラーコード(00000) */
	private static final String ERR_CD_00000 = "00000";
	/** エラーコード(99123) */
	private static final String ERR_CD_99123 = "99123";
	/** エラーコード(99124) */
	private static final String ERR_CD_99124 = "99124";
	/** エラーコード(99145) */
	private static final String ERR_CD_99145 = "99145";
	/** エラーコード(99150) */
	private static final String ERR_CD_99150 = "99150";
	/** エラーコード(99153) */
	private static final String ERR_CD_99153 = "99153";
	/** エラーコード(99152) */
	private static final String ERR_CD_99152 = "99152";
	/** エラーコード(99156) */
	private static final String ERR_CD_99156 = "99156";
	/** エラーコード(99186) */
	private static final String ERR_CD_99186 = "99186";
	/** エラーコード(99066) */
	private static final String ERR_CD_99066 = "99066";
	/** エラーコード(52001) */
	private static final String ERR_CD_52001 = "52001";
	/** エラーコード(52002) */
	private static final String ERR_CD_52002 = "52002";
	/** エラーコード(52003) */
	private static final String ERR_CD_52003 = "52003";
	/** エラーコード(52005) */
	private static final String ERR_CD_52005 = "52005";
	/** エラーコード(52006) */
	private static final String ERR_CD_52006 = "52006";
	/** エラーコード(99005) */
	private static final String ERR_CD_99005 = "99005";
	/** エラーコード(99004) */
	private static final String ERR_CD_99004 = "99004";
	/** エラーコード(99070) */
	private static final String ERR_CD_99070 = "99070";
	/** エラーコード(99999) */
	private static final String ERR_CD_99999 = "99999";
	/** エラー内容(00000) */
	private static final String ERR_NAIYO_00000 = "正常終了";
	/** エラー内容(99123) */
	private static final String ERR_NAIYO_99123 = "「コンテンツ契約番号」必須チェックエラー";
	/** エラー内容(99124) */
	private static final String ERR_NAIYO_99124 = "「コンテンツ契約番号」書式チェックエラー";
	/** エラー内容(99145) */
	private static final String ERR_NAIYO_99145 = "「更新者ID」必須チェックエラー";
	/** エラー内容(99150) */
	private static final String ERR_NAIYO_99150 = "「更新者ID」書式チェックエラー";
	/** エラー内容(99153) */
	private static final String ERR_NAIYO_99153 = "「更新者」必須チェックエラー";
	/** エラー内容(99152) */
	private static final String ERR_NAIYO_99152 = "「更新日時」必須チェックエラー";
	/** エラー内容(99156) */
	private static final String ERR_NAIYO_99156 = "「メール送信フラグ」書式チェックエラー";
	/** エラー内容(99186) */
	private static final String ERR_NAIYO_99186 = "「共連れ解約実施フラグ」書式チェックエラー";
	/** エラー内容(99066) */
	private static final String ERR_NAIYO_99066 = "「更新日時」書式チェックエラー";
	/** エラー内容(52001) */
	private static final String ERR_NAIYO_52001 = "契約存在なしエラー";
	/** エラー内容(52002) */
	private static final String ERR_NAIYO_52002 = "契約解約済エラー";
	/** エラー内容(52003) */
	private static final String ERR_NAIYO_52003 = "SYSID不一致エラー";
	/** エラー内容(52005) */
	private static final String ERR_NAIYO_52005 = "更新日時妥当性エラー";
	/** エラー内容(52006) */
	private static final String ERR_NAIYO_52006 = "共連れ解約エラー";
	/** エラー内容(99005) */
	private static final String ERR_NAIYO_99005 = "SYSID未存在エラー(退会済み、仮登録会員含む)";
	/** エラー内容(99004) */
	private static final String ERR_NAIYO_99004 = "コンテンツ管理システムメンテナンスエラー";
	/** エラー内容(99070) */
	private static final String ERR_NAIYO_99070 = "メール送信エラー";
	/** エラー内容(99999) */
	private static final String ERR_NAIYO_99999 = "例外発生";
	
	/**
	 * 初期処理
	 * 
	 * @param JBSbatCommonItem
	 *            commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
		/** ▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼ */
		/** ▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼ */
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CN_T_CONT_KEI_UCWK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CN_T_CONT_KEI_UCWK);
		
		// 2015/11/08 ST-2015-0000060 Add Start
		db_CN_T_CONT_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CN_T_CONT_KEI);
		// 2015/11/08 ST-2015-0000060 Add End
		/** ▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲ */

		// フリー項目取得
		String[] mfreeItem = super.freeItem.split(";");
		// 解約対象リスト（長期未利用）ファイルパス格納
		this.dslTrgtListMriyoFile = mfreeItem[0];

		// エラーコード設定用マップ作成
		mErrCodeMap.put(ERR_CD_00000, ERR_NAIYO_00000);
		mErrCodeMap.put(ERR_CD_99123, ERR_NAIYO_99123);
		mErrCodeMap.put(ERR_CD_99124, ERR_NAIYO_99124);
		mErrCodeMap.put(ERR_CD_99145, ERR_NAIYO_99145);
		mErrCodeMap.put(ERR_CD_99150, ERR_NAIYO_99150);
		mErrCodeMap.put(ERR_CD_99153, ERR_NAIYO_99153);
		mErrCodeMap.put(ERR_CD_99152, ERR_NAIYO_99152);
		mErrCodeMap.put(ERR_CD_99156, ERR_NAIYO_99156);
		mErrCodeMap.put(ERR_CD_99186, ERR_NAIYO_99186);
		mErrCodeMap.put(ERR_CD_99066, ERR_NAIYO_99066);
		mErrCodeMap.put(ERR_CD_52001, ERR_NAIYO_52001);
		mErrCodeMap.put(ERR_CD_52002, ERR_NAIYO_52002);
		mErrCodeMap.put(ERR_CD_52003, ERR_NAIYO_52003);
		mErrCodeMap.put(ERR_CD_52005, ERR_NAIYO_52005);
		mErrCodeMap.put(ERR_CD_52006, ERR_NAIYO_52006);
		mErrCodeMap.put(ERR_CD_99005, ERR_NAIYO_99005);
		mErrCodeMap.put(ERR_CD_99004, ERR_NAIYO_99004);
		mErrCodeMap.put(ERR_CD_99070, ERR_NAIYO_99070);
		mErrCodeMap.put(ERR_CD_99999, ERR_NAIYO_99999);
		
		// KKIFExxxオブジェクト生成
		this.outPutFile = new JBSbatOutputFileUtil(this.dslTrgtListMriyoFile);
		this.outPutFile.setEncode(JKKBatConst.SJIS);
		this.outPutFile.setLine(CRLF);
		this.outPutFile.createWriter();
		/** ▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲ */
	}

	/**
	 * 主処理
	 * 
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		/** ▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼ */
		// 各種変数初期化
		StringBuilder sb = new StringBuilder();

		// 入力件数加算
		dslTrgtListMriyoInputCnt++;
		
		// 共通部の編集
		// 050番号
		appendStr(sb, (String)inMap.get(JBSbatCNIFM009002.N_050_TELNO), 256, true, true);
		// SYSID
		appendStr(sb, (String)inMap.get(JBSbatCNIFM009002.SYSID), 256, true, true);
		// メールアドレス
		appendStr(sb, (String)inMap.get(JBSbatCNIFM009002.MLAD), 256, true, true);
		// 氏名
		appendStr(sb, (String)inMap.get(JBSbatCNIFM009002.NAME), 256, true, true);
		// お客様ID
		appendStr(sb, (String)inMap.get(JBSbatCNIFM009002.CUST_ID), 256, true, true);
		// 会員種別
		appendStr(sb, (String)inMap.get(JBSbatCNIFM009002.MMB_SBT), 256, true, true);
		// eoID
		appendStr(sb, (String)inMap.get(JBSbatCNIFM009002.EOID), 256, true, true);
		// LaLaCall契約日
		appendStr(sb, (String)inMap.get(JBSbatCNIFM009002.LALACALL_KEI_YMD), 256, true, true);
		// コールバック用電話番号
		appendStr(sb, (String)inMap.get(JBSbatCNIFM009002.CALLBK_TELNO), 256, true, true);
		// 050番号契約数
		appendStr(sb, (String)inMap.get(JBSbatCNIFM009002.N_050_TELNO_KEI_CNT), 256, true, true);
		// コンテンツ契約番号
		appendStr(sb, (String)inMap.get(JBSbatCNIFM009002.CONT_KEI_NO), 256, true, true);
		// 更新年月日時分秒
		appendStr(sb, (String)inMap.get(JBSbatCNIFM009002.UPD_DTM), 256, true, true);

		// 固有部
		// ヘッダ部１行目
		if (dslTrgtListMriyoInputCnt == 1)
		{
			// 接続成功/失敗
			appendStr(sb, "", 256, true, true);
			// HTTPリターン
			appendStr(sb, "", 256, true, true);
			// HTTPリターンコード内容
			appendStr(sb, "", 256, false, true);
		}
		// ヘッダ部２行目
		else if (dslTrgtListMriyoInputCnt == 2)
		{
			// 接続成功/失敗
			appendStr(sb, HEADER_TERMOK_NG, 256, true, true);
			// HTTPリターン
			appendStr(sb, HEADER_HTTP_RETURN, 256, true, true);
			// HTTPリターンコード内容
			appendStr(sb, HEADER_HTTP_RETURN_INFO, 256, false, true);
		}
		// データ部
		else
		{
			// 解約対象リスト（長期未利用）結果取得
			HashMap<String, Object> dslTrgtListMriyoRsltMap = new HashMap<String, Object>();
			dslTrgtListMriyoRsltMap = this.getDslTrgtListMriyo(inMap);
			
			// 接続成功/失敗
			appendStr(sb, (String)dslTrgtListMriyoRsltMap.get(JBSbatCNIFM009002.HEADER_CONNECT_SEIKOU_SIPPAI), 256, true, true);
			// HTTPリターン
			appendStr(sb, (String)dslTrgtListMriyoRsltMap.get(JBSbatCNIFM009002.HTTP_RETURN), 256, true, true);
			// HTTPリターンコード内容
			appendStr(sb, (String)dslTrgtListMriyoRsltMap.get(JBSbatCNIFM009002.HTTP_RETURN_CD_NAIYO), 256, false, true);
		}
		
		// 解約対象リスト（長期未利用）結果ファイル出力
		if (sb.toString() != null)
		{
			this.outPutFile.write(sb.toString());
		}

		return null;
		/** ▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲ */
	}

	/**
	 * 業務サービス終了処理
	 * 
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
		/** ▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼ */
		/** ▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼ */
		// DBアクセスクラスをクローズします
		db_CN_T_CONT_KEI_UCWK.close();
		
		// 2015/11/08 ST-2015-0000060 Add Start
		db_CN_T_CONT_KEI.close();
		// 2015/11/08 ST-2015-0000060 Add End
		/** ▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲ */
		
		this.outPutFile.close();
		/** ▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲ */
	}

	/** ▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼ */

	/**
	 * SQLKEY(KK_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * 
	 * <pre>
	 * 1.引数でバイント変数を設定します。&lt;br&gt;
	 * 
	 * 2.DBアクセスを実行します。&lt;br&gt;
	 * 
	 * 3.メソッドの呼び出し方です。&lt;br&gt;
	 * 	引数:
	 * 	param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 * 	 	印刷依頼年月日
	 * 	 	通知書ステータス
	 * </pre>
	 * <p>
	 * 
	 * @param param
	 *            バイント変数の値配列。
	 * @return list 取得結果リスト
	 * @throws Exception
	 *             業務サービス内で発生した例外全般。
	 */
	private List<JBSbatCommonDBInterface> executeCN_T_CONT_KEI_UCWK_CN_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CN_T_CONT_KEI_UCWK.selectBySqlDefine(paramList, CN_T_CONT_KEI_UCWK_CN_SELECT_003);

		List<JBSbatCommonDBInterface> resultList = new ArrayList<JBSbatCommonDBInterface>();
		JBSbatCommonDBInterface resultInfo = db_CN_T_CONT_KEI_UCWK.selectNext();

		while (null != resultInfo)
		{
			resultList.add(resultInfo);
			resultInfo = db_CN_T_CONT_KEI_UCWK.selectNext();
		}
		return resultList;
	}

	// 2015/11/08 ST-2015-0000060 Add Start
	/**
	 * SQLKEY(KK_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * 
	 * <pre>
	 * 1.引数でバイント変数を設定します。&lt;br&gt;
	 * 
	 * 2.DBアクセスを実行します。&lt;br&gt;
	 * 
	 * 3.メソッドの呼び出し方です。&lt;br&gt;
	 * 	引数:
	 * 	param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 * 	 	印刷依頼年月日
	 * 	 	通知書ステータス
	 * </pre>
	 * <p>
	 * 
	 * @param param
	 *            バイント変数の値配列。
	 * @return list 取得結果リスト
	 * @throws Exception
	 *             業務サービス内で発生した例外全般。
	 */
	private List<JBSbatCommonDBInterface> executeCN_T_CONT_KEI_CN_SELECT_015(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_CN_T_CONT_KEI.selectBySqlDefine(paramList, CN_T_CONT_KEI_CN_SELECT_015);

		List<JBSbatCommonDBInterface> resultList = new ArrayList<JBSbatCommonDBInterface>();
		JBSbatCommonDBInterface resultInfo = db_CN_T_CONT_KEI.selectNext();

		while (null != resultInfo)
		{
			resultList.add(resultInfo);
			resultInfo = db_CN_T_CONT_KEI.selectNext();
		}
		return resultList;
	}
	// 2015/11/08 ST-2015-0000060 Add End
	/**
	 * 解約対象リスト（長期未利用）結果取得
	 * 
	 * @param inMap 解約対象リスト（長期未利用）ファイル
	 * @return 解約対象リスト（長期未利用）結果
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private HashMap<String, Object> getDslTrgtListMriyo(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// 初期化
		HashMap<String, Object> dslTrgtListMriyoRsltMap = new HashMap<String, Object>();
		String contKeiNo = (String)inMap.get(JBSbatCNIFM009001.CONT_KEI_NO);
		String tel050No = (String)inMap.get(JBSbatCNIFM009001.N_050_TELNO);
		
		// コンテンツ契約スキーマより、最新の状態を取得
		String[] param = new String[] { contKeiNo, tel050No };
		List<JBSbatCommonDBInterface> rsltList = executeCN_T_CONT_KEI_UCWK_CN_SELECT_003(param);
		
		// 結果が０件の場合
		if (rsltList.isEmpty())
		{
			// 接続成功/失敗
			dslTrgtListMriyoRsltMap.put(JBSbatCNIFM009002.HEADER_CONNECT_SEIKOU_SIPPAI, HIFUN);
			// HTTPリターン
			dslTrgtListMriyoRsltMap.put(JBSbatCNIFM009002.HTTP_RETURN, HIFUN);
			// HTTPリターンコード内容
			dslTrgtListMriyoRsltMap.put(JBSbatCNIFM009002.HTTP_RETURN_CD_NAIYO, NO_DATA_MSG);
		}
		else
		{
			// ステータスが契約中の場合
			String contKeiUcwkStat = (String)rsltList.get(0).getValue(JBSbatCN_T_CONT_KEI_UCWK.CONT_KEI_UCWK_STAT);
			if (CONT_KEI_STAT_100.equals(contKeiUcwkStat))
			{
				// ユースケースIDを格納
				HashMap<String, Object> paramMap = new HashMap<String, Object>();
				paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, USECASE_ID_CNSV0007);
				
				// データを格納
				HashMap dataMap = new HashMap();
				
				// 共通情報のマッピング（CNSV00701SC）
				HashMap<String, Object> data01Map = new HashMap<String, Object>();
				// ファンクションコード
				data01Map.put("func_code", FUNC_CD);
				// ＫＥＹ＿コンテンツ契約番号
				data01Map.put("key_cont_kei_no", (String)inMap.get(JBSbatCNIFM009001.CONT_KEI_NO));
				
				dataMap.put("CNSV000701SC", data01Map);
				
				// 共通情報のマッピング（CNSV00702SC）
				HashMap<String, Object> data02Map = new HashMap<String, Object>();
				// ファンクションコード
				data02Map.put("func_code", FUNC_CD);
				// SYSID
				data02Map.put("sysid", (String)inMap.get(JBSbatCNIFM009001.SYSID));
				// コンテンツ契約番号
				data02Map.put("contract_no", (String)inMap.get(JBSbatCNIFM009001.CONT_KEI_NO));
				// 更新者ID
				data02Map.put("upd_user_id", UPD_USER_ID);
				// 更新者
				data02Map.put("upd_user", UPD_USER);
				
				// 2015/11/08 ST-2015-0000060 Add Start
				// コンテンツ契約スキーマより、最新の状態を取得
				String[] param_ContKei = new String[] { contKeiNo };
				List<JBSbatCommonDBInterface> rsltLisContKeit = executeCN_T_CONT_KEI_CN_SELECT_015(param);
				// 2015/11/08 ST-2015-0000060 Add End
				
				// 2015/11/08 ST-2015-0000060 Mod Start
				// 更新日時
//				String updDtm = (String)inMap.get(JBSbatCNIFM009001.UPD_DTM);
				String updDtm = null;
				
				// 結果が０件の場合
				if (rsltLisContKeit.isEmpty())
				{
					updDtm = (String)inMap.get(JBSbatCNIFM009001.UPD_DTM);
				}
				else
				{
					updDtm = (String)rsltLisContKeit.get(0).getValue(JBSbatCN_T_CONT_KEI.UPD_DTM);
				}
				// 2015/11/08 ST-2015-0000060 Mod End
				
				if (updDtm.length() <= 14)
				{
					data02Map.put("upd_date", updDtm);
				}
				else
				{
					data02Map.put("upd_date", updDtm.substring(0, 14));
				}
				
				// メール送信フラグ
				data02Map.put("mail_send_flg", MAIL_SEND_FLG);
				
				dataMap.put("CNSV000702SC", data02Map);
				
				// サービスの処理結果の格納用MAP
				HashMap<String, Object> outputMap = new HashMap<String, Object>();
				
				// 強制解約CCを呼び出す
				JCCBatchEsbInterface.invokeService(super.commonItem, paramMap, dataMap, outputMap);
				
				String returnCode = JCCBatchEsbInterface.getReturnCode(outputMap);

				// 正常
				if(RETURN_CODE_SUCCESS.equals(returnCode))
				{
					// 接続成功
					dslTrgtListMriyoRsltMap.put(JBSbatCNIFM009002.HEADER_CONNECT_SEIKOU_SIPPAI, CCMG_TERM_OK);
				}
				else
				{
					// 接続失敗
					dslTrgtListMriyoRsltMap.put(JBSbatCNIFM009002.HEADER_CONNECT_SEIKOU_SIPPAI, CCMG_TERM_NG);
				}
				
				HashMap mapCNSV000702SC = (HashMap)outputMap.get("CNSV000702SC");
				String errCd = (String)mapCNSV000702SC.get("err_cd");
				
				// 2015/11/08 ST-2015-0000060 Add Start
				// 正常でもエラーコードが設定されていない場合は、CCMG連携されていないので、失敗扱いとする
				if((RETURN_CODE_SUCCESS.equals(returnCode)) && (("null".equals(errCd)) || (!JCNBatCheckUtil.isNotNullCheck(errCd))))
//					if(RETURN_CODE_SUCCESS.equals(returnCode) && (errCd == null))
				{
					// 接続失敗
					dslTrgtListMriyoRsltMap.put(JBSbatCNIFM009002.HEADER_CONNECT_SEIKOU_SIPPAI, CCMG_TERM_NG);
					// HTTPリターン
					dslTrgtListMriyoRsltMap.put(JBSbatCNIFM009002.HTTP_RETURN, HIFUN);
					// HTTPリターンコード内容
					dslTrgtListMriyoRsltMap.put(JBSbatCNIFM009002.HTTP_RETURN_CD_NAIYO, EO_KIKAN_ERR);
				}
				else
				{
				// 2015/11/08 ST-2015-0000060 Add End
				
				// HTTPリターン
				dslTrgtListMriyoRsltMap.put(JBSbatCNIFM009002.HTTP_RETURN, errCd);
				// HTTPリターンコード内容
				dslTrgtListMriyoRsltMap.put(JBSbatCNIFM009002.HTTP_RETURN_CD_NAIYO, mErrCodeMap.get(errCd));
				
				// 2015/11/08 ST-2015-0000060 Add Start
				}
				// 2015/11/08 ST-2015-0000060 Add End
			}
			// ステータスが契約中でない場合
			else
			{
				// 接続成功/失敗
				dslTrgtListMriyoRsltMap.put(JBSbatCNIFM009002.HEADER_CONNECT_SEIKOU_SIPPAI, HIFUN);
				// HTTPリターン
				dslTrgtListMriyoRsltMap.put(JBSbatCNIFM009002.HTTP_RETURN, HIFUN);
				// HTTPリターンコード内容
				dslTrgtListMriyoRsltMap.put(JBSbatCNIFM009002.HTTP_RETURN_CD_NAIYO, CHG_STS_MSG.replace(REPLACE_CHAR, contKeiUcwkStat));
			}
		}

		// 結果を返却
		return dslTrgtListMriyoRsltMap;
	}
	/**
	 * 文字列を連結します。
	 * 
	 * @param str
	 *            文字列
	 * @param value
	 *            連結対象の文字列
	 * @param size
	 *            サイズ
	 * @param continueFlg
	 *            継続フラグ
	 * @param doubleQuoteFlg
	 *            ダブルクォーテーションフラグ
	 * @throws Exception 
	 */
	private void appendStr(StringBuilder str, String value, int size, boolean continueFlg, boolean doubleQuoteFlg) throws Exception
	{
		// 2015/11/08 ST-2015-0000060 Add Start
		// ダブルクォーテーションなしのCSV出力にする
		doubleQuoteFlg = false;
		// 2015/11/08 ST-2015-0000060 Add End
		
		String preValue = value;

		if (null == value)
		{
			preValue = "";
		}
		
		if (doubleQuoteFlg)
		{
			str.append("\"");
		}
		
		str.append(adjustCharSize(preValue, size));
		
		if (doubleQuoteFlg)
		{
			str.append("\"");
		}

		if (continueFlg)
		{
			str.append(JBSbatKKConst.STR_COMMA);
		}
	}
	/**
	 * 文字列を指定されたサイズに調整する。<BR>
	 * 指定サイズが文字列のサイズより小さい場合は、文字列の語尾を切り捨てる。
	 * <BR>
	 * @param para 調整前の文字列
	 * @param size 指定サイズ（バイト数）
	 * @param encode 文字コード（ＯＳ準拠の場合は""（空）を指定）
	 * @return String 調整後の文字列
	 * @throws Exception
	 */
	public String adjustCharSize(String para, int size)
			throws Exception
	{
		String retStr = "";
		byte[] paraByte = null;
		if (null == para)
		{
			return retStr;
		}
		if (0 >= size)
		{
			return retStr;
		}
		// 入力文字列のバイト配列を取得する
		paraByte = para.getBytes(MS932);

		// 入力文字列のバイトサイズを取得する
		int paraByteSize = paraByte.length;

		// 入力文字列のバイトサイズ ≦ 指定サイズの場合
		if (paraByteSize <= size)
		{
			retStr = para;
		}
		// 入力文字列のバイトサイズ ＞ 指定サイズの場合
		else
		{ 
			// 指定サイズ分の文字列を生成する
//			retStr = new String(paraByte, 0, size);
			retStr = new String(paraByte, 0, size, MS932);

		}

		return retStr;
	}
}
