/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKKnTvGuidemgFileHenshu
*	ソースファイル名	：JBSbatKKKnTvGuidemgFileHenshu.java
*	作成者				：FJ）古田
*	作成日				：2011年10月14日
*＜機能概要＞
*　ＫＮテレビジョンガイド誌ファイル編集部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/10/14  FJ）古田		新規作成
*	v3.00.00	2012/06/22	FJ)神吉		【SGY-2012-0000015】住所編集部品対応
*	v3.01.00	2012/08/03	FJ)倉上		【ST1-2012-0000162】障害対応
*	v3.02.00	2012/08/29	FJ)倉上		【ST1-2012-0000465】障害対応
*	v3.03.00	2012/09/24	FJ)倉上		【ST1-2012-0000622】障害対応
*	v3.04.00	2012/11/23	FJ)柳		【TAI-2012-0000095】対応
*	v4.00.00	2013/03/05	FJ)柳		【KT1-2013-0000323】ガイド送付リストの編集対応見直し対応
*	v4.01.00	2013/03/19	FJ)石原		【IT1-2013-0000498】システムエラー対処の横展開
*	v5.00.00	2013/01/24	FJ)石原		【ANK-1371-00-00】ガイド送付リストの編集対応
*	v7.00.00	2014/02/18	FJ)桑島		【OM-2014-0000434】現住所取得対応
**	v49.00.00	2020/04/01	GDC)ニール	【ANK-3807-00-00】Kドライブ連携巻取り対応
*	v50.00.00	2020/08/30  FJ)星野		OM-2020-0001141
*********************************************************************/
package eo.business.service;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatInterface;
import eo.business.common.JCCBatCommon;
import eo.business.common.JCCbatDenshiFileUtil;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatKKIFE054001;
import eo.business.util.table.JBSbatCK_T_CUST;
import eo.business.util.table.JBSbatKK_T_IDO_RSV;
import eo.business.util.table.JBSbatKK_T_SVKEI_KAISEN_UW;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JPCDateUtil;
import eo.common.util.JZMAdOutputEdit;
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;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKKnTvGuidemgFileHenshu extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(お客様)*/
	private static final String D_TBL_NAME_CK_T_CUST = "CK_T_CUST";

	/** テーブル(回線対象サービス契約)*/
	private static final String D_TBL_NAME_KK_T_KAISEN_TG_SVKEI = "KK_T_KAISEN_TG_SVKEI";

	/** テーブル(異動予約)*/
	private static final String D_TBL_NAME_KK_T_IDO_RSV = "KK_T_IDO_RSV";

	/** SQL定義キー(KK_SELECT_014)*/
	private static final String CK_T_CUST_KK_SELECT_014 = "KK_SELECT_014";

	/** SQL定義キー(KK_SELECT_010)*/
	private static final String KK_T_KAISEN_TG_SVKEI_KK_SELECT_010 = "KK_SELECT_010";

	/** SQL定義キー(KK_SELECT_001)*/
	private static final String KK_T_IDO_RSV_KK_SELECT_001 = "KK_SELECT_001";
	// ANK-3807-00-00 ADD START
	/** SQL定義キー(ダウンロードファイル管理　INSERT_002) */
	private static final String ZM_T_DL_FILE_KANRI_KK_INSERT_002 = "KK_INSERT_002";
	
	/** テーブル(ダウンロードファイル管理) */
	private static final String TBL_ZM_T_DL_FILE_KANRI = "ZM_T_DL_FILE_KANRI";
	// ANK-3807-00-00 ADD END
	
	/** テーブルアクセスクラス(お客様)*/
	private JBSbatSQLAccess db_CK_T_CUST = null;

	/** テーブルアクセスクラス(回線対象サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KAISEN_TG_SVKEI = null;

	/** テーブルアクセスクラス(異動予約)*/
	private JBSbatSQLAccess db_KK_T_IDO_RSV = null;

	// ANK-3807-00-00 ADD START
	/** DBアクセスクラス(ダウンロードファイル管理) */
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;
	// ANK-3807-00-00 ADD END
	
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 外部インターフェイスID（KNテレビジョンガイド誌ファイル）*/
	private static final String FILE_ID = "KKIFE054";
	
	/** ファイル名１*/
	private static final String FILENAME1 = "KNTVGUIDE.csv";
	
	/** ファイル名２*/
	private static final String FILENAME2 = "KNTVGUIDE_2.csv";
	
	// ANK-3807-00-00 ADD START
	/** ファイル名３*/
	private static final String FILENAME3 = "KNテレビジョンガイド誌ファイル_%s.csv";
	// ANK-3807-00-00 ADD END
	
	/** 件数ファイル名*/
	// ANK-3807-00-00 DEL START
	// private static final String FILENAME_COUNT = "KNTVGUIDE.cnt";
	// ANK-3807-00-00 DEL END
	
	/** フラグファイル名*/
	// ANK-3807-00-00 DEL START
	// private static final String FILENAME_FLG = "KNTVGUIDE.flg";
	// ANK-3807-00-00 DEL END
	
	// // ANK-3807-00-00 ADD START
	private static final String FILE_CD = "0000";
	// // ANK-3807-00-00 ADD END
	
	/** 異動区分（解約）*/
	private static final String IDO_KBN_KAIYAKU = "00005";
	
	/** 顧客状態（契約者）*/
	private static final String CUST_STAT_KEIYAKU = "1";
	
	/** 顧客状態（解約済）*/
	private static final String CUST_STAT_KAIYAKU = "2";
	
	/** リスト出力（敬称）*/
	private static final String LIST_KEISHO = "様";
	
	/** 該当データカウント*/
	private int count = 0;
	
	/** 業務パラメタキー(KK_KNTV_GD_WAT_CKI)*/
	private static final String KK_KNTV_GD_WAT_CKI = "KK_KNTV_GD_WAT_CKI";
	
	/** 業務パラメタキー(KK_MAIL_SAVE_MONTH)*/
	private static final String KK_KNTV_GD_FLYER_NG = "KK_KNTV_GD_FLYER_NG";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CK_T_CUST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_CUST);
		db_KK_T_KAISEN_TG_SVKEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KAISEN_TG_SVKEI);
		db_KK_T_IDO_RSV = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_IDO_RSV);
		
		//ANK-3807-00-00 ADD START
		db_ZM_T_DL_FILE_KANRI = new JBSbatSQLAccess(commonItem,TBL_ZM_T_DL_FILE_KANRI);
		//ANK-3807-00-00 ADD END
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
		super.logPrint.printDebugLog("execute_START");

		// [0]:読み込みファイル [1]：出力先フォルダパス
		String[] free = super.commonItem.getFreeItem().split(";");

		// 翌月を取得
		String opDateYm = JBSbatInterface.adjustMonth(super.opeDate, 1).substring(0, 6);
		super.logPrint.printDebugLog("翌月を取得[" + opDateYm + "]");
		
		// 外部ファイル名（ファイル１）を取得します。
		String creFile = opDateYm + FILENAME1;

		super.logPrint.printDebugLog("ファイル１[" + creFile + "]");

		// ファイル１が存在するかチェックします。
		File outFile1 = new File(free[2] + creFile);
		
		// KNテレビジョンガイド誌ファイル存在チェック結果保持
		boolean isOutFile1Exist = false;

		// ファイルが存在している場合ファイル2を抽出します。
		if(outFile1.exists())
		{
			creFile = opDateYm + FILENAME2;
			isOutFile1Exist = true;
		}

		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();

		// ヘッダ部の出力
		outputBean.addOutMapList(createKkife054Header());

		// 中間ファイルデータ（[0]:サービス契約番号 [1]:SYSID [2]:発行部数 [3]:オプションサービス契約番号）
		String[] spltData = null;

		// 翌月１日を取得します。
		String opdAddMonth = getOpdAddMonth();

		BufferedReader in_reader = null;
		try {
			// ＫＮテレビジョンガイド誌中間ファイル
			in_reader = new BufferedReader(new InputStreamReader(new FileInputStream(free[0]), JKKBatConst.SJIS));
	
			// 業務パラメータよりガイド誌視聴地域を取得
			String[] kntvGudmgWatCki = JBSbatStringUtil.Rtrim(JKKBatCommon.getWorkParamSetteValue(commonItem, KK_KNTV_GD_WAT_CKI)).split(",");
			
			// 業務パラメータよりガイド誌チラシNGを取得
			String[] kntvGudmgFlyer = JBSbatStringUtil.Rtrim(JKKBatCommon.getWorkParamSetteValue(commonItem, KK_KNTV_GD_FLYER_NG)).split(",");
			
			while (in_reader.ready())
			{
				spltData = in_reader.readLine().split(",");
	
				// ファイルを出力します。
				outputBean.addOutMapList(createKkife054Data(spltData, opdAddMonth, kntvGudmgWatCki, kntvGudmgFlyer));
				
				// 件数をカウントアップ
				count++;
			}
		}catch(IOException e) {
			throw new JBSbatBusinessException("EKKB0020CE", new String[]{(free[0])});
			
		}finally {
			if ( null != in_reader) {
				in_reader.close();
			}
		}
		
		
		// データ件数が0件の場合、設定したヘッダ行を削除します。
		if(0 == count)
		{
			outputBean.clearOutMapList();
		}
		
		// ファイルを出力します。
		JKKBatCommon.outFile(super.commonItem, outputBean, "KKIFE054001", free[2], creFile);
		
		// ANK-3807-00-00 ADD START
		// ファイル１を作成中の場合、件数ファイルとフラグファイルの出力を行います。
		if(!isOutFile1Exist)
		{
			String delYmd = JPCDateUtil.addMonth(opeDate, 1);
// OM-2020-0001141対応 20200830 星野 MOD START
//			addEfileKanriDlFileKanri(count, FILE_CD, free[2].concat(creFile),
//					delYmd, String.format(FILENAME3, opeDate.substring(0, 6)));
			addEfileKanriDlFileKanri(count, FILE_CD, free[2].concat(creFile),
					delYmd, String.format(FILENAME3, opDateYm));
// OM-2020-0001141対応 20200830 星野 MOD END
		}
		// ANK-3807-00-00 ADD END
		
		// ANK-3807-00-00 DEL START
		// ファイル１を作成中の場合、件数ファイルとフラグファイルの出力を行います。
		// if(!isOutFile1Exist)
		 //{
			// ファイルを出力します。
		//	JKKBatCommon.outFile(super.commonItem, outputBean, "KKIFE054001", free[1], creFile);
			
			// 有料番組ガイド申込者配布分Listファイル送信件数ファイル出力
		//	this.createFile(free[1] + opDateYm + FILENAME_COUNT, true);
			
			// 有料番組ガイド申込者配布分Listファイル送信フラグファイル出力
		//	this.createFile(free[1] + opDateYm + FILENAME_FLG, false);
			
			// KNテレビジョンガイド誌ファイル送信データファイル出力
		//	this.executeFtp(free[1] + opDateYm + FILENAME1);
			
			// KNテレビジョンガイド誌ファイル送信件数ファイル出力
		//	this.executeFtp(free[1] + opDateYm + FILENAME_COUNT);
			
			// KNテレビジョンガイド誌ファイル送信フラグファイル出力
		//	this.executeFtp(free[1] + opDateYm + FILENAME_FLG);
		//}
		// ANK-3807-00-00 DEL END
		
		super.logPrint.printDebugLog("execute_END");
		return null;
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CK_T_CUST.close();
		db_KK_T_KAISEN_TG_SVKEI.close();
		db_KK_T_IDO_RSV.close();
		
		//ANK-3807-00-00 ADD START
		db_ZM_T_DL_FILE_KANRI.close();
		//ANK-3807-00-00 ADD END
		
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
		
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * SQLKEY(KK_SELECT_014)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	SYSID
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCK_T_CUST_KK_SELECT_014(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CK_T_CUST.selectBySqlDefine(paramList, CK_T_CUST_KK_SELECT_014);
	}

	/**
	 * SQLKEY(KK_SELECT_010)で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_010(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_KAISEN_TG_SVKEI.selectBySqlDefine(paramList, KK_T_KAISEN_TG_SVKEI_KK_SELECT_010);
	}

	/**
	 * SQLKEY(KK_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_IDO_RSV_KK_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_IDO_RSV.selectBySqlDefine(paramList, KK_T_IDO_RSV_KK_SELECT_001);
	}

	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 運用日の翌月１日を取得します。
	 * @return  opDateYm 翌月１日
	 * 
	 */
	private String getOpdAddMonth()
	{
		// 翌月１日を取得
		String opDateYm = JBSbatInterface.adjustMonth(super.opeDate, 1).substring(0, 6) + "01";

		super.logPrint.printDebugLog("翌月1日を取得[" + opDateYm + "]");

		return opDateYm;
	}
	
	/**
	 * 
	 *  ＫＮテレビジョンガイド誌ファイル送信のヘッダ作成を行います。
	 * @return JBSbatServiceInterfaceMap
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap createKkife054Header() throws Exception
	{
		// 入出力インターフェースオブジェクトを生成
		JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();

		outmap.setString(JBSbatKKIFE054001.PCD, "郵便番号");
		outmap.setString(JBSbatKKIFE054001.AD_1, "住所1");
		outmap.setString(JBSbatKKIFE054001.AD_2, "住所2");
		outmap.setString(JBSbatKKIFE054001.CHO, "丁目");
		outmap.setString(JBSbatKKIFE054001.BNCHI, "番地");
		outmap.setString(JBSbatKKIFE054001.GOU, "号");
		outmap.setString(JBSbatKKIFE054001.TOU, "棟");
		outmap.setString(JBSbatKKIFE054001.ADRRM, "室");
		outmap.setString(JBSbatKKIFE054001.SHUGJ_NM, "集合住宅名");
		outmap.setString(JBSbatKKIFE054001.KANJI_NM_1, "漢字氏名1");
		outmap.setString(JBSbatKKIFE054001.KANJI_NM_2, "漢字氏名2");
		outmap.setString(JBSbatKKIFE054001.KISHO, "敬称");
		outmap.setString(JBSbatKKIFE054001.CUST_STAT, "顧客状態");
		outmap.setString(JBSbatKKIFE054001.CD, "コード");
		outmap.setString(JBSbatKKIFE054001.GUIDE_HASSO_CNT, "ガイド誌発送部数");
		outmap.setString(JBSbatKKIFE054001.GUIDE_SBT, "ガイド誌種別");
		outmap.setString(JBSbatKKIFE054001.HASSO_WAY, "発送方法");
		outmap.setString(JBSbatKKIFE054001.TEL, "TEL");
		outmap.setString(JBSbatKKIFE054001.GUIDE_SOHU_ENDYMD, "ガイド送付終了日");
		outmap.setString(JBSbatKKIFE054001.CKI_FLG, "地域フラグ");
		outmap.setString(JBSbatKKIFE054001.CHIRASHI_SOFU_FLG, "チラシ送付フラグ");
		outmap.setString(JBSbatKKIFE054001.YOBI_FLG_1, "予備フラグ1");
		outmap.setString(JBSbatKKIFE054001.YOBI_FLG_2, "予備フラグ2");
		outmap.setString(JBSbatKKIFE054001.YOBI_FLG_3, "予備フラグ3");
		
		outmap.setOutFlg(true);

		return outmap;

	}
	
	/**
	 * 
	 *  ＫＮテレビジョンガイド誌ファイル送信の作成を行います。
	 * @param spltData ＫＮテレビジョンガイド誌中間ファイルのデータ
	 * 			[0]:サービス契約番号 [1]:SYSID [2]:発行部数
	 * @param opdAddMonth 翌月１日
	 * @param kntvGudmgWatCki 業務パラメタから取得したガイド誌視聴地域
	 * @param kntvGudmgFlyer 業務パラメタから取得したガイド誌チラシNG
	 * @return JBSbatServiceInterfaceMap
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap createKkife054Data(String[] spltData, String opdAddMonth, String[] kntvGudmgWatCki, String[] kntvGudmgFlyer) throws Exception
	{

		// お客様情報を取得します。
		String okyakusamaName = getSysIdInfo(spltData[1], opdAddMonth);

		// 回線内訳情報を取得
		JBSbatCommonDBInterface kaisenUwkInfo = getSvKeiKaisenUwInfo(spltData[0]);

		// 異動予約テーブルより異動区分を取得し顧客状態を取得します。
		String kokykuStat = getKokykuStat(spltData[0], opdAddMonth);
		
		String stateNm = "";		// 都道府県名
		String cityNm = "";			// 市区町村名
		String oaztsuNm = "";		// 大字通称名
		String azchoNm = "";		// 字丁目名
		String bnchigo = "";		// 番地号
		String adrttm = "";			// 住所補記・建物名
		String adrrm = "";			// 補記・部屋番号
		
		stateNm =  JBSbatStringUtil.Rtrim(kaisenUwkInfo.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_STATE_NM));		// 都道府県名
		cityNm =  JBSbatStringUtil.Rtrim(kaisenUwkInfo.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_CITY_NM));			// 市区町村名
		oaztsuNm =   JBSbatStringUtil.Rtrim(kaisenUwkInfo.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_OAZTSU_NM));	// 大字通称名
		azchoNm =  JBSbatStringUtil.Rtrim(kaisenUwkInfo.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_AZCHO_NM));		// 字丁目名
		bnchigo =  JBSbatStringUtil.Rtrim(kaisenUwkInfo.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_BNCHIGO));		// 番地号
		adrttm = JBSbatStringUtil.Rtrim(kaisenUwkInfo.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_ADRTTM));			// 住所補記・建物名
		adrrm =  JBSbatStringUtil.Rtrim(kaisenUwkInfo.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_ADRRM));			// 補記・部屋番号
		
		//回線内訳情報の都道府県名と市区町村名
		String[] sohusState = {stateNm,cityNm};
		
		// 住所出力編集部品(パターン１０)呼出
		String[] adNm = JZMAdOutputEdit.getPtn10(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm);

		// 入出力インターフェースオブジェクトを生成
		JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();

		// サービス契約回線内訳．回線場所電話番号
		outmap.setString(JBSbatKKIFE054001.PCD, JBSbatStringUtil.Rtrim(kaisenUwkInfo.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_PCD)));
		// 回線場所都道府県名+回線場所市区町村名を設定
		outmap.setString(JBSbatKKIFE054001.AD_1, JBSbatStringUtil.Rtrim(adNm[0]));
		// サービス契約回線内訳．回線場所大字通称名
		outmap.setString(JBSbatKKIFE054001.AD_2, JBSbatStringUtil.Rtrim(adNm[1]));
		// 回線場所字丁目名+回線場所番地号を設定
		outmap.setString(JBSbatKKIFE054001.CHO, JBSbatStringUtil.Rtrim(adNm[2]));
		// nullを設定
		outmap.setString(JBSbatKKIFE054001.BNCHI, "");
		// nullを設定
		outmap.setString(JBSbatKKIFE054001.GOU, "");
		// nullを設定
		outmap.setString(JBSbatKKIFE054001.TOU, "");
		// サービス契約回線内訳．回線場所住所補記・部屋番号
		outmap.setString(JBSbatKKIFE054001.ADRRM, JBSbatStringUtil.Rtrim(adNm[4]));
		// サービス契約回線内訳．回線場所住所補記・建物名
		outmap.setString(JBSbatKKIFE054001.SHUGJ_NM, JBSbatStringUtil.Rtrim(adNm[3]));
		// お客様．お客様名
		outmap.setString(JBSbatKKIFE054001.KANJI_NM_1, okyakusamaName);
		// nullを設定
		outmap.setString(JBSbatKKIFE054001.KANJI_NM_2, "");
		// 固定値（"様"）
		outmap.setString(JBSbatKKIFE054001.KISHO, LIST_KEISHO);
		// 顧客状態（"1"：異動予約が存在しない、"2"：異動予約が存在する）
		outmap.setString(JBSbatKKIFE054001.CUST_STAT, kokykuStat);
		// ＫＮテレビジョンガイド誌中間ファイル．サービス契約番号
		outmap.setString(JBSbatKKIFE054001.CD, spltData[0]);
		// ＫＮテレビジョンガイド誌中間ファイル．発行部数
		outmap.setString(JBSbatKKIFE054001.GUIDE_HASSO_CNT, spltData[2]);
		// nullを設定
		outmap.setString(JBSbatKKIFE054001.GUIDE_SBT, "");
		// nullを設定
		outmap.setString(JBSbatKKIFE054001.HASSO_WAY, "");
		// サービス契約回線内訳．回線場所電話番号
		outmap.setString(JBSbatKKIFE054001.TEL, JBSbatStringUtil.Rtrim(kaisenUwkInfo.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_TELNO)));
		// nullを設定
		outmap.setString(JBSbatKKIFE054001.GUIDE_SOHU_ENDYMD, "");

		// 地域フラグを設定
		outmap.setString(JBSbatKKIFE054001.CKI_FLG, getCkiFlg(sohusState, kntvGudmgWatCki));
		
		// チラシ送付フラグを設定
		outmap.setString(JBSbatKKIFE054001.CHIRASHI_SOFU_FLG, getChirashiSofuFlg(spltData[0], kntvGudmgFlyer));
		
		// 予備フラグ1
		outmap.setString(JBSbatKKIFE054001.YOBI_FLG_1, "00");
		
		// 予備フラグ2
		outmap.setString(JBSbatKKIFE054001.YOBI_FLG_2, "00");
		
		// 予備フラグ3
		outmap.setString(JBSbatKKIFE054001.YOBI_FLG_3, "00");
		
		outmap.setOutFlg(true);

		return outmap;
	}
	
	/**
	 * 
	 * お客様テーブルよりお客様名を取得します。<br>
	 * <p>
	 * 
	 * <pre>
	 * 	引数:
	 * 	param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 * 	 	抽出したサービス契約番号
	 *		 	SYSID
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * 
	 * @param sysId sysId
	 * @param opdAddMonth 運用日付の翌月１日
	 * @return お客様名
	 * @throws Exception
	 *             業務サービス内で発生した例外全般。
	 */
	private String getSysIdInfo(String sysId, String opdAddMonth) throws Exception
	{

		String[] setParam = new String[2];
		setParam[0] = sysId;
		setParam[1] = opdAddMonth;

		executeCK_T_CUST_KK_SELECT_014(setParam);

		JBSbatCommonDBInterface ckCust = db_CK_T_CUST.selectNext();

		if(ckCust == null)
		{
			throw new JBSbatBusinessException("EKKB0210CE", new String[] { "お客様", sysId });
		}

		return JBSbatStringUtil.Rtrim(ckCust.getString(JBSbatCK_T_CUST.CUST_NM));
	}
	
	/**
	 * 
	 * サービス契約回線内訳よりデータを取得します。<br>
	 * <p>
	 * 
	 * <pre>
	 * 	引数:
	 * 	param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 * </pre>
	 * <p>
	 * 
	 * @param svcKeiNo サービス契約番号
	 * @return サービス契約回線内訳データ
	 * @throws Exception
	 *             業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface getSvKeiKaisenUwInfo(String svcKeiNo) throws Exception
	{

		String[] setParam = new String[2];
		setParam[0] = svcKeiNo;
		setParam[1] = super.opeDate;

		executeKK_T_KAISEN_TG_SVKEI_KK_SELECT_010(setParam);

		JBSbatCommonDBInterface kaisenTgSvkei = db_KK_T_KAISEN_TG_SVKEI.selectNext();

		if(kaisenTgSvkei == null)
		{
			throw new JBSbatBusinessException("EKKB0210CE", new String[] { "回線対象サービス契約", svcKeiNo });
		}

		return kaisenTgSvkei;
	}
	
	/**
	 * 
	 * 異動予約より異動区分を取得し、顧客状態を判別します。<br>
	 * <p>
	 * 
	 * <pre>
	 * 	引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * 
	 * @param svcKeiNo サービス契約番号
	 * @param opdAddMonth 運用日付の翌月１日
	 * @return 顧客状態
	 * @throws Exception
	 *             業務サービス内で発生した例外全般。
	 */
	private String getKokykuStat(String svcKeiNo, String opdAddMonth) throws Exception
	{
		// 初期値に契約を設定
		String kokykuStat = CUST_STAT_KEIYAKU;

		String[] setParam = new String[1];
		setParam[0] = svcKeiNo;

		executeKK_T_IDO_RSV_KK_SELECT_001(setParam);

		JBSbatCommonDBInterface idoRsv = null;

		for (idoRsv = db_KK_T_IDO_RSV.selectNext(); null != idoRsv; idoRsv = db_KK_T_IDO_RSV.selectNext())
		{
			// 異動区分が解約の場合
			if(IDO_KBN_KAIYAKU.equals(idoRsv.getString(JBSbatKK_T_IDO_RSV.IDO_DIV)))
			{
				// 解約を設定
				kokykuStat = CUST_STAT_KAIYAKU;
				break;
			}
		}


		return kokykuStat;
	}

	/**
	 * 指定されたファイルを出力します。<br>
	 * <p>
	 * @param file_name ファイル名(フルパス)
	 * @param isCntFile ファイル作成フラグ(true：件数ファイル　false：フラグファイル)
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void createFile(String file_name, boolean isCntFile) throws IOException, JBSbatBusinessException
	{
		// 一時ファイル読込み処理
		BufferedWriter wr = null;
		try
		{
			// ファイルの生成(SJIS)
			wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file_name), JKKBatConst.SJIS));
			
			// 件数ファイルを作成する場合は件数を設定する。
			if(isCntFile)
			{
				// 件数を""(ダブルクォート)で囲み、改行する。
				wr.write("\"" + count + "\"");
				wr.write("\n");
			}
			
			// ファイル出力
			wr.flush();
		}
		catch(IOException e)
		{
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0250CE, new String[]{file_name, e.getMessage()});
		}
		finally
		{
			if (wr != null)
			{
				wr.close();
			}
		}
	}
	
	/**
	 * Ftp連携部品を使用してファイル送信を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.ファイルパスが空の場合、エラーとします。<br>
	 * 
	 * 2.連携部品の引数を作成します。<br>
	 * 
	 * 3.Ftp連携部品を実行します。<br>
	 * 
	 * 4.処理結果が正常以外の場合、エラーを発生させます。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param value　転送対象ファイルパス。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeFtp(String value) throws Exception
	{
		ArrayList<String> file_list = new ArrayList<String>(1);
		HashMap<String, Object> out_map = new HashMap<String, Object>(3);

		file_list.add(value);

		// 転送処理を実行します
		boolean result = JCCBatCommon.putFTP(super.commonItem, file_list, FILE_ID, JCCBatCommon.ISI, out_map);

		// エラー判定をします
		if (!result)
		{
			String kbn = out_map.get("ERR_KBN").toString();
			String err_msg = "";

			// ファイルエラーの場合
			if ("2".equals(kbn))
			{
				err_msg = (String)((HashMap)((ArrayList)out_map.get("FILE_ERR")).get(0)).get("ERR_MESSAGE");
			}
			else
			{
				err_msg = (String)((HashMap)out_map.get("CONNECT_ERR")).get("ERR_MESSAGE");
			}

			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0200CE, new String[]{value, err_msg});
		}
	}
	
	/**
	 * 地域フラグの編集を行います。<br>
	 * <p>
	 * @param sohusState 送付先都道府県([0]：ガイド誌送付先都道府県名　[1]：ガイド誌送付先市区町村名)
	 * @param kntvGudmgWatCki 業務パラメタから取得したガイド誌視聴地域
	 * @return ckiFlg 編集後地域フラグ
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getCkiFlg(String[] sohusState, String[] kntvGudmgWatCki) throws Exception
	{
		// 地域フラグの初期値を設定
		String ckiFlg = "00";
		
		// 送付先データが未設定の場合、初期値を返却
		if ( sohusState == null )
		{
			return ckiFlg;
		}
		
		// [0]：ガイド誌送付先都道府県名 + [1]：ガイド誌送付先市区町村名
		String serchSohusState = sohusState[0] + sohusState[1];
		
		if ( kntvGudmgWatCki != null && kntvGudmgWatCki.length != 0 )
		{
			for ( int i = 0; i < kntvGudmgWatCki.length; i++ )
			{
				// 部分一致で都道府県名を検索
				if ( serchSohusState.indexOf(kntvGudmgWatCki[i]) != -1 )
				{
					// 該当する地域のコードを設定
					ckiFlg = kntvGudmgWatCki[i - 1];
					
					break;
				}
			}
		}
		
		return ckiFlg;
	}
	
	/**
	 * チラシ送付フラグの編集を行います。<br>
	 * <p>
	 * @param svcKeiNo サービス契約番号
	 * @param kntvGudmgFlyer 業務パラメタから取得したガイド誌チラシNG
	 * @return ckiFlg 編集後地域フラグ
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getChirashiSofuFlg(String svcKeiNo, String[] kntvGudmgFlyer) throws Exception
	{
		// チラシ送付フラグの初期値を設定
		String chirashiSofuFlg = "00";
		
		if ( kntvGudmgFlyer != null && kntvGudmgFlyer.length != 0 )
		{
			for ( int i = 0; i < kntvGudmgFlyer.length; i++ )
			{
				// 一致するサービス契約番号が存在するかの判定
				if ( kntvGudmgFlyer[i].equals(svcKeiNo) ){
					
					chirashiSofuFlg = "99";
					
					break;
				}
			}
		}
		
		return chirashiSofuFlg;
	}

	// ANK-3807-00-00 ADD START
	/**
	 * 電子ファイル管理・ダウンロードファイル管理へ登録します。
	 * <br>
	 * @param dataCnt データ件数
	 * @param fileCd ファイルコード
	 * @param filePath
	 * @param fileDelYmd ファイル削除年月日
	 * @param fileName
	 * @throws Exception 例外が発生した場合
	 */
	private void addEfileKanriDlFileKanri(int dataCnt, String fileCd, String filePath,
			String fileDelYmd, String fileName) throws Exception
	{
		// 電子ファイル管理登録
		String[] ret = JCCbatDenshiFileUtil.createDenshiFile(this.commonItem, fileCd,
				filePath, fileDelYmd);
		
		// ダウンロードファイル管理登録
		String[] paramIns = {
				JKKStrConst.TRAN_KANRI_NO_217							// 処理管理番号
				, fileName												// ダウンロードファイル名
				, String.valueOf(dataCnt)								// データ件数
				, ret[0]												// 電子ファイル管理番号
				, ret[1]												// 世代登録年月日時分秒
		};
		
		executeZM_T_DL_FILE_KANRI_KK_INSERT_002(paramIns);
	}

	/**
	 * SQLKEY(KK_INSERT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *			TRN_KANRI_NO
	 *			FILE_NM
	 *			DATA_CNT
	 *			EFILE_KANRI_NO
	 *			GENE_ADD_DTM
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_T_DL_FILE_KANRI_KK_INSERT_002(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());
		
		// DBアクセスを実行します
		db_ZM_T_DL_FILE_KANRI.executeBySqlDefine(paramList, ZM_T_DL_FILE_KANRI_KK_INSERT_002);
	}
	// ANK-3807-00-00 ADD END
}