/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCNMuryoUriIfTblCreate
*	ソースファイル名	：JBSbatCNMuryoUriIfTblCreate.java
*	作成者				：富士通　
*	作成日				：2011年09月22日
*＜機能概要＞
*　無料売上情報テーブル作成処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/09/22   富士通		新規作成
*	v5.00.0		2013/03/29  FJ)泉		【IT1-2013-0000689】文字列結合時のnullチェック追加
*	v54.00.00	2021/08/12  GDC)j.hortilano		【ANK-4069-00-00】EOL対応(バッチ・DBサーバリプレース対応)
*********************************************************************/
package eo.business.service;

import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCNBatCommon;
import eo.business.util.file.JBSbatCNIFE018;
import eo.common.constant.JCNStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.util.JBSbatAplConst;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatCNMuryoUriIfTblCreate extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(お客様)*/
	private static final String D_TBL_NAME_CK_T_CUST = "CK_T_CUST";
	
	/** テーブル(コンテンツ契約)*/
	private static final String D_TBL_NAME_CN_T_CONT_KEI = "CN_T_CONT_KEI";

	/** テーブル(ジャンル)*/
	private static final String D_TBL_NAME_CN_M_GENRE = "CN_M_GENRE";

	/** テーブル(ワーク売上情報)*/
	private static final String D_TBL_NAME_CN_T_SALES_INFO = "CN_T_SALES_INFO";

	/** テーブル(コード名称管理)*/
	private static final String D_TBL_NAME_ZM_M_CD_NM_KANRI = "ZM_M_CD_NM_KANRI";

	/** SQL定義キー(CN_SELECT_002)*/
	private static final String CK_T_CUST_CN_SELECT_002 = "CN_SELECT_002";

	/** SQL定義キー(CN_SELECT_001)*/
	private static final String CN_T_CONT_KEI_CN_SELECT_001 = "CN_SELECT_001";

	/** SQL定義キー(CN_SELECT_002)*/
	private static final String CN_M_GENRE_CN_SELECT_002 = "CN_SELECT_002";

	/** SQL定義キー(CN_SELECT_003)*/
	private static final String CN_T_CONT_KEI_CN_SELECT_003 = "CN_SELECT_003";

	/** SQL定義キー(CN_DELETE_001)*/
	private static final String CN_T_SALES_INFO_CN_DELETE_001 = "CN_DELETE_001";

	/** SQL定義キー(CN_INSERT_001)*/
	private static final String CN_T_SALES_INFO_CN_INSERT_001 = "CN_INSERT_001";

	/** SQL定義キー(CN_SELECT_002)*/
	private static final String ZM_M_CD_NM_KANRI_CN_SELECT_002 = "CN_SELECT_002";

	/** テーブルアクセスクラス(お客様)*/
	private JBSbatSQLAccess db_CK_T_CUST = null;

	/** テーブルアクセスクラス(コンテンツ契約)*/
	private JBSbatSQLAccess db_CN_T_CONT_KEI = null;

	/** テーブルアクセスクラス(ジャンル)*/
	private JBSbatSQLAccess db_CN_M_GENRE = null;

	/** テーブルアクセスクラス(ワーク売上情報)*/
	private JBSbatSQLAccess db_CN_T_SALES_INFO = null;

	/** テーブルアクセスクラス(コード名称管理)*/
	private JBSbatSQLAccess db_ZM_M_CD_NM_KANRI = null;

	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** メッセージキー*/
	private static final String ECNB0220AI = JPCBatchMessageConstant.ECNB0220AI;

	/** メッセージキー*/
	private static final String ECNB0230KE = JPCBatchMessageConstant.ECNB0230KE;
	
	/** メッセージキー*/
	private static final String ECNB0320KE = JPCBatchMessageConstant.ECNB0320KE;
	
	/** メッセージキー*/
	private static final String ECNB0370AI = JPCBatchMessageConstant.ECNB0370AI;
	
	/** メッセージキー*/
	private static final String ECNB0420KE = JPCBatchMessageConstant.ECNB0420KE;
	
	/** 処理名*/
	private static final String S_TRAN_NM = "無料コンテンツデータ";
	
	/** キー項目名*/
	private static final String S_TRAN_GENRE_ID = "ジャンルID";
	
	/** 項目名*/
	private static final String S_TRAN_GENRE_NM = "ジャンル名";
	
	/** キー項目名*/
	private static final String S_KEY_CONT_KEI_NO = "コンテンツ契約番号:";
	
	/** INPUTファイル名*/
	private static String strInFileNm = "";
	
	/** OUTPUTファイル名*/
	private static String strOutFileNm = "";
	
	/** ファイル作成日*/
	private static String strFileYmd = "";
	
	/** ファイル通番*/
	private static String strFileSeq = "";
	
	/** システム日付(年月日)*/
	private static String strSysDateYmd = "";
	
	/** レプリカ情報更新ファイル:料金フラグ("0"無料)*/
	private static final String S_CONT_KEI_YRYO_FLG_0 = "0";
	
	/** コンテンツマスタ存在フラグ(0:外部コンテンツ) */
	private static final String S_CONTMST_FLG_0 = "0";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		// FREEパラメータ取得
		String strFreeParam = commonItem.getFreeItem();
		String[] lines = strFreeParam.split(JCNStrConst.S_PARAM_DELIM);
		if(lines.length != 2)
		{
			throw new JBSbatBusinessException(ECNB0230KE);
		}
		
		// DBアクセスクラスを生成します
		db_CK_T_CUST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_CUST);
		db_CN_T_CONT_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CN_T_CONT_KEI);
		db_CN_M_GENRE = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CN_M_GENRE);
		db_CN_T_SALES_INFO = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CN_T_SALES_INFO);
		db_ZM_M_CD_NM_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_CD_NM_KANRI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// FREEパラメータ取得
		String strFreeParam = commonItem.getFreeItem();
		if(strFreeParam.length() == 0)
		{
			throw new JBSbatBusinessException(ECNB0230KE);
		}
		// パラメータを区切り文字で分割する
		String[] lines = strFreeParam.split(JCNStrConst.S_PARAM_DELIM);
		// パラメータ取得
		String strFreeParam1 = lines[0];	// コンテンツレプリカ情報更新ファイル
		String strFreeParam2 = lines[1];	// 処理結果ファイル
		
		strInFileNm = strFreeParam1;
		strOutFileNm = strFreeParam2;
		
		// 運用日付取得
		strSysDateYmd = commonItem.getOpeDate();
		
		try
		{
			// コンテンツレプリカ情報更新ファイル読み込み
			ArrayList<String> contRepFileList = new ArrayList<String>();
			contRepFileList = readFile(strFreeParam1);
			
			// ヘッダー部よりファイル通番取得
			
			
			// ファイル通番・ファイル作成日取得
			if(contRepFileList.size() != 0)
			{
				String strContRep[] = contRepFileList.get(0).split(JCNStrConst.S_DELIM_TAB);
				if(JCNStrConst.S_FILECHK_REC_KBN_0.equals(strContRep[0]))
				{
					strFileYmd = strContRep[1];
					strFileSeq = strContRep[2];
				}
			}
			
			int iContKeiReadCnt = 0;			// コンテンツレプリカ情報更新ファイル:コンテンツ契約レコード読込件数
			int iSalesInfoInsCnt = 0;			// ワーク売上情報登録件数
			
			for(int i = 0; i < contRepFileList.size(); i++)
			{
				String strContKeiNo = "";		// コンテンツ契約番号格納変数初期化
				String strSysid = "";			// SYSID格納用変数初期化
				String strGenreId = "";			// ジャンルID格納変数初期化
				String strGenreNm = "";			// ジャンル名称格納変数初期化
				String strMembersbtCd = "";		// 会員種別格納用変数初期化
				
				// レコードを取得し、区切り文字で分割する
				String[] strRepFile = contRepFileList.get(i).split(JCNStrConst.S_DELIM_TAB);
				
				// レコード区分が「1」の時にメイン処理を実施
				if(strRepFile[0].equals(JCNStrConst.S_FILECHK_REC_KBN_1))
				{
					// 指示コード「C01」:サービス更新指示情報
					if (JCNStrConst.S_SHIJI_CD_C01.equals(strRepFile[1]))
					{
						if (S_CONT_KEI_YRYO_FLG_0.equals(strRepFile[13]))
						{
							// 決済方法番号「0」:無料 のときは契約番号を取得(レコードを読込む)
							strContKeiNo = strRepFile[2];
							strSysid = strRepFile[3];
						}
						++iContKeiReadCnt;
					}
					
					// 指示コード「C02」:コンテンツ更新指示情報
					if (JCNStrConst.S_SHIJI_CD_C02.equals(strRepFile[1]))
					{
						if (S_CONT_KEI_YRYO_FLG_0.equals(strRepFile[14]))
						{
							// 料金決済方法番号「0」:無料 のときは契約番号を取得(レコードを読込む)
							strContKeiNo = strRepFile[2];
							strSysid = strRepFile[3];
						}
						++iContKeiReadCnt;
					}
					
					// コンテンツ契約番号保持変数がNULLのとき(登録対象外データ)は以降の処理を行わない
					if (JCNBatCommon.isNotNullCheck(strContKeiNo))
					{
						// 読込レコードのテスト会員チェック
						JBSbatCommonDBInterface testCust_dbList = new JBSbatCommonDBInterface();
						testCust_dbList. setValue(strContKeiNo);														// コンテンツ契約番号設定
						testCust_dbList. setValue(strSysDateYmd);														// 部品よりシステム日付設定
						executeCN_T_CONT_KEI_CN_SELECT_001(testCust_dbList.getList().toArray());
						String strCnt = "";
						strCnt = db_CN_T_CONT_KEI.selectNext().getString("CNT");
						
						// チェック結果がテスト会員(取得結果が0件)の場合は以降の処理を行わない。
						if(!JCNStrConst.S_ZERO.equals(strCnt))
						{
							// ジャンル検索SQL発行用領域作成
							JBSbatCommonDBInterface genre_map = new JBSbatCommonDBInterface(); 
							JBSbatCommonDBInterface genre_dbList = new JBSbatCommonDBInterface();
							
							// 無料売上情報SQL発行用領域作成
							JBSbatCommonDBInterface free_contkei_map = new JBSbatCommonDBInterface(); 
							JBSbatCommonDBInterface free_contkei_dbList = new JBSbatCommonDBInterface();
							
							// お客様SQL発行用領域作成
							JBSbatCommonDBInterface ck_cust_map = new JBSbatCommonDBInterface(); 
							JBSbatCommonDBInterface ck_cust_dbList = new JBSbatCommonDBInterface();
							
							// ワーク売上情報データ削除SQL発行用領域作成
							JBSbatCommonDBInterface wkSalesDel_dbList = new JBSbatCommonDBInterface();
							
							// ワーク売上情報データ登録SQL発行用領域作成
							JBSbatCommonDBInterface wkSalesCre_dbList = new JBSbatCommonDBInterface();
							
							// ジャンル、ジャンル情報検索
							genre_dbList. setValue(strContKeiNo);														// コンテンツ契約番号設定
							executeCN_M_GENRE_CN_SELECT_002(genre_dbList.getList().toArray());
							genre_map = db_CN_M_GENRE.selectNext();
							
							// ジャンルIDが取得できなかった場合は業務パラメータテーブルより集計用ジャンルIDを設定
							if(genre_map == null)
							{
								JBSbatCommonDBInterface genreId_dbList = new JBSbatCommonDBInterface();
								JBSbatCommonDBInterface genreId_map = new JBSbatCommonDBInterface();
								genreId_dbList. setValue(JCNStrConst.S_CD01196);										// コード種別コード設定
								genreId_dbList. setValue(JCNStrConst.S_ONE);											// コード区分設定
								executeZM_M_CD_NM_KANRI_CN_SELECT_002(genreId_dbList.getList().toArray());
								genreId_map = db_ZM_M_CD_NM_KANRI.selectNext();
								if(genreId_map == null)
								{
									errMsgOut(commonItem, ECNB0420KE, S_TRAN_GENRE_ID, S_KEY_CONT_KEI_NO + strContKeiNo);
								}
								
								strGenreId = genreId_map.getString("CD_DIV_NM");
								
								JBSbatCommonDBInterface genreNm_dbList = new JBSbatCommonDBInterface();
								JBSbatCommonDBInterface genreNm_map = new JBSbatCommonDBInterface();
								genreNm_dbList. setValue(JCNStrConst.S_CD01197);										// コード種別コード設定
								genreNm_dbList. setValue(JCNStrConst.S_ONE);											// コード区分設定
								executeZM_M_CD_NM_KANRI_CN_SELECT_002(genreNm_dbList.getList().toArray());
								genreNm_map = db_ZM_M_CD_NM_KANRI.selectNext();
								if(genreNm_map == null)
								{
									errMsgOut(commonItem, ECNB0420KE, S_TRAN_GENRE_NM, S_KEY_CONT_KEI_NO + strContKeiNo);
								}
								
								strGenreNm = genreNm_map.getString("CD_DIV_NM");
							}
							else
							{
								strGenreId = genre_map.getString("GENRE_ID_CN0051");									// ジャンルID(1件目のみ取得)
								strGenreNm = genre_map.getString("GENRE_NM");											// ジャンル名称(1件目のみ取得)
							}
							// コンテンツ契約より無料売上データ取得
							free_contkei_dbList. setValue(strContKeiNo);												// コンテンツ契約番号設定
							free_contkei_dbList. setValue(strSysDateYmd);												// 部品よりシステム日付設定
							executeCN_T_CONT_KEI_CN_SELECT_003(free_contkei_dbList.getList().toArray());
							free_contkei_map = db_CN_T_CONT_KEI.selectNext();
							
							// 無料売上情報が取得できていない場合はエラー終了する。
							if(free_contkei_map == null)
							{
								errMsgOut(commonItem, ECNB0420KE, S_TRAN_NM, S_KEY_CONT_KEI_NO + strContKeiNo);
							}
							
							// お客様に対してSQL実行
							ck_cust_dbList. setValue(strSysid);
							ck_cust_dbList. setValue(strSysDateYmd);
							executeCK_T_CUST_CN_SELECT_002(ck_cust_dbList.getList().toArray());
							
							for(ck_cust_map = db_CK_T_CUST.selectNext(); null != ck_cust_map; ck_cust_map = db_CK_T_CUST.selectNext())
							{
								strMembersbtCd = ck_cust_map.getString("MEMBER_SBT_CD");	// 会員種別
							}
							
							// 取得した無料売上情報のデータを使用し、ワーク売上情報に登録されているデータを削除する。
							wkSalesDel_dbList. setValue(free_contkei_map.getString("KEI_TRAN_YMD"));					// 契約処理年月日設定
							wkSalesDel_dbList. setValue(free_contkei_map.getString("CONT_KEI_NO"));						// コンテンツ契約番号設定
							wkSalesDel_dbList. setValue(JCNStrConst.S_ZERO);											// コンテンツ契約番号枝番("0"固定値)設定
							wkSalesDel_dbList. setValue(JCNStrConst.S_ZERO);											// コンテンツ契約訂正通番("0"固定値)設定
							wkSalesDel_dbList. setValue(JCNStrConst.S_ZERO);											// コンテンツ課金訂正通番("0"固定値)設定
							executeCN_T_SALES_INFO_CN_DELETE_001(wkSalesDel_dbList.getList().toArray());
							
							// 無料売上情報データをワーク売上情報へ登録する。
							wkSalesCre_dbList. setValue(free_contkei_map.getString("KEI_TRAN_YMD"));					// 売上情報取得対象年月日
							wkSalesCre_dbList. setValue(strContKeiNo);													// コンテンツ契約番号
							wkSalesCre_dbList. setValue(JCNStrConst.S_ZERO);											// コンテンツ契約番号枝番
							wkSalesCre_dbList. setValue(JCNStrConst.S_ZERO);											// コンテンツ契約訂正通番
							wkSalesCre_dbList. setValue(JCNStrConst.S_ZERO);											// コンテンツ課金訂正通番
							wkSalesCre_dbList. setValue(strGenreId);													// ジャンルID
							wkSalesCre_dbList. setValue(strGenreNm);													// ジャンル名
							wkSalesCre_dbList. setValue(free_contkei_map.getString("SYSID"));							// SYSID
							
							String contCd = free_contkei_map.getString("CONT_CD");
							String contOutCd = free_contkei_map.getString("CONT_OUT_CD");
							
							// 結合項目のnullチェック(nullの場合は空文字に変更)
							if (!JCNBatCommon.isNotNullCheck(contCd))
							{
								contCd = "";
							}
							if (!JCNBatCommon.isNotNullCheck(contOutCd))
							{
								contOutCd = "";
							}
							
							if (JCNStrConst.S_SHIJI_CD_C01.equals(strRepFile[1]))
							{
								// 指示コード「C01」:サービス更新指示情報の場合は「前0+コンテンツサービスコード+コンテンツコード」
								wkSalesCre_dbList. setValue(JCNStrConst.S_ZERO + free_contkei_map.getString("CONT_SVC_CD")
										+ contCd);										// コンテンツ識別コード
							}
							else
							{
								// 指示コード「C02」:コンテンツ更新指示情報の場合は下記処理分岐を行う
								if((free_contkei_map.getString("CONT_SONZAI_FLG")).equals(S_CONTMST_FLG_0))
								{
									// コンテンツマスタ存在フラグが0(外部コンテンツ)の場合は「前0+コンテンツサービスコード+コンテンツ外部コード」
									wkSalesCre_dbList. setValue(JCNStrConst.S_ZERO + free_contkei_map.getString("CONT_SVC_CD")
											+ contOutCd);								// コンテンツ識別コード
								}
								else
								{
									// コンテンツマスタ存在フラグが0以外(内部コンテンツ)の場合は「前0+コンテンツサービスコード+コンテンツコード」
									wkSalesCre_dbList. setValue(JCNStrConst.S_ZERO + free_contkei_map.getString("CONT_SVC_CD")
											+ contCd);									// コンテンツ識別コード
								}
							}
							wkSalesCre_dbList. setValue(free_contkei_map.getString("CONT_KEI_STA_DTM"));				// コンテンツ契約開始年月日時分秒
							wkSalesCre_dbList. setValue(free_contkei_map.getString("CONT_KEI_END_DTM"));				// コンテンツ契約終了年月日時分秒
							wkSalesCre_dbList. setValue(free_contkei_map.getString("KEI_TRAN_YMD").substring(0, 6));	// 課金対象年月
							wkSalesCre_dbList. setValue(strMembersbtCd);												// 会員種別コード
							wkSalesCre_dbList. setValue(free_contkei_map.getString("CONT_NM"));							// コンテンツ名
							wkSalesCre_dbList. setValue(free_contkei_map.getString("CONT_SBT_CD"));						// コンテンツ種別コード
							wkSalesCre_dbList. setValue(free_contkei_map.getString("CONT_KEI_YRYO_MRYO_FLG"));			// コンテンツ契約有料無料フラグ
							wkSalesCre_dbList. setValue(free_contkei_map.getString("CONT_TANKA"));						// コンテンツ単価
							wkSalesCre_dbList. setValue(free_contkei_map.getString("CONT_BUY_CNT"));					// コンテンツ購入数量
							wkSalesCre_dbList. setValue(JCNStrConst.S_ZERO);											// 税率
							wkSalesCre_dbList. setValue(JCNStrConst.S_ZERO);											// 課金額
							wkSalesCre_dbList. setValue(JCNStrConst.S_ZERO);											// 課金状態コード
							wkSalesCre_dbList. setValue(JCNStrConst.S_ZERO);											// 売上減額
							wkSalesCre_dbList. setValue(JCNStrConst.S_ZERO);											// 補償費
							wkSalesCre_dbList. setValue(JCNStrConst.S_ZERO);											// コンテンツ課金訂正区分
							wkSalesCre_dbList. setValue(JCNStrConst.S_ZERO);											// 赤黒区分
//							wkSalesCre_dbList. setValue(JCNBatCommon.getSysDateTimeStamp());							// 登録年月日時分秒
//							wkSalesCre_dbList. setValue(commonItem.getBatchUserId());									// 登録オペレータアカウント
//							wkSalesCre_dbList. setValue(JCNBatCommon.getSysDateTimeStamp());							// 更新年月日時分秒
//							wkSalesCre_dbList. setValue(commonItem.getBatchUserId());									// 更新オペレータアカウント
							wkSalesCre_dbList. setValue("");															// 削除年月日時分秒
							wkSalesCre_dbList. setValue("");															// 削除オペレータアカウント
//							wkSalesCre_dbList. setValue(JCNStrConst.S_MK_FLG);											// 無効フラグ
							executeCN_T_SALES_INFO_CN_INSERT_001(wkSalesCre_dbList.getList().toArray());
							iSalesInfoInsCnt++;
						}
					}
				}
			}
			// 処理結果ログ出力
			super.logPrint.printBusinessErrorLog(ECNB0370AI, 
					new String[]{strInFileNm, String.valueOf(iContKeiReadCnt)});						// コンテンツレプリカ情報更新ファイル:コンテンツ契約レコード読込件数
			super.logPrint.printBusinessErrorLog(ECNB0220AI, 
					new String[]{D_TBL_NAME_CN_T_SALES_INFO, String.valueOf(iSalesInfoInsCnt)});		// ワーク売上情報(無料売上情報)登録件数
			
			return null;
		}
		catch(SQLException se)
		{
			createResultFile(strOutFileNm, strFileYmd, strFileSeq, JCNStrConst.S_FILECHK_ERR_0101);
			// ANK-4069-00-00 DEL START
			//ArrayList<String> ftpList = new ArrayList<String>();
			//ftpList.add(strOutFileNm);
			//boolean updFlg = JCNBatCommon.putFTP(commonItem, ftpList, JCNStrConst.S_IFID_CONTREP_SEND, new HashMap<String, Object>());
			//if(!updFlg)
			//{
			//	throw new JBSbatBusinessException(ECNB0320KE, new String[] {strOutFileNm});
			//}
			// ANK-4069-00-00 DEL END
			throw se;
		}
		catch(IOException ie)
		{
			createResultFile(strOutFileNm, strFileYmd, strFileSeq, JCNStrConst.S_FILECHK_ERR_0101);
			// ANK-4069-00-00 DEL START
			//ArrayList<String> ftpList = new ArrayList<String>();
			//ftpList.add(strOutFileNm);
			//boolean updFlg = JCNBatCommon.putFTP(commonItem, ftpList, JCNStrConst.S_IFID_CONTREP_SEND, new HashMap<String, Object>());
			//if(!updFlg)
			//{
			//	throw new JBSbatBusinessException(ECNB0320KE, new String[] {strOutFileNm});
			//}
			// ANK-4069-00-00 DEL END
			throw ie;
		}
		
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CN_T_CONT_KEI.close();
		db_CN_M_GENRE.close();
		db_CN_T_SALES_INFO.close();
		db_ZM_M_CD_NM_KANRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * SQLKEY(CN_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 executeCN_T_CONT_KEI_CN_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CN_T_CONT_KEI.selectBySqlDefine(paramList, CN_T_CONT_KEI_CN_SELECT_001);
	}

	/**
	 * SQLKEY(CN_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	CONT_KEI_NO
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCN_M_GENRE_CN_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_CN_M_GENRE.selectBySqlDefine(paramList, CN_M_GENRE_CN_SELECT_002);
	}

	/**
	 * SQLKEY(CN_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 executeCN_T_CONT_KEI_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.selectBySqlDefine(paramList, CN_T_CONT_KEI_CN_SELECT_003);
	}

	/**
	 * SQLKEY(CN_DELETE_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 executeCN_T_SALES_INFO_CN_DELETE_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());

		// DBアクセスを実行します
		db_CN_T_SALES_INFO.executeBySqlDefine(paramList, CN_T_SALES_INFO_CN_DELETE_001);
	}

	/**
	 * SQLKEY(CN_INSERT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	売上情報取得対象年月日
	 *		 	コンテンツ契約番号
	 *		 	コンテンツ契約番号枝番
	 *		 	コンテンツ契約訂正通番
	 *		 	コンテンツ課金訂正通番
	 *		 	ジャンルID
	 *		 	ジャンル名
	 *		 	SYSID
	 *		 	コンテンツ識別コード
	 *		 	コンテンツ契約開始年月日時分秒
	 *		 	コンテンツ契約終了年月日時分秒
	 *		 	課金対象年月
	 *		 	会員種別コード
	 *		 	コンテンツ名
	 *		 	コンテンツ種別コード
	 *		 	コンテンツ契約有料無料フラグ
	 *		 	コンテンツ単価
	 *		 	コンテンツ購入数量
	 *		 	税率
	 *		 	課金額
	 *		 	課金状態コード
	 *		 	売上減額
	 *		 	補償費
	 *		 	コンテンツ課金識別区分
	 *		 	赤黒区分
	 *		 	削除年月日時分秒
	 *		 	削除オペレータアカウント
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCN_T_SALES_INFO_CN_INSERT_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());
		paramList.setValue(param[7].toString());
		paramList.setValue(param[8].toString());
		paramList.setValue(param[9].toString());
		paramList.setValue(param[10].toString());
		paramList.setValue(param[11].toString());
		paramList.setValue(param[12].toString());
		paramList.setValue(param[13].toString());
		paramList.setValue(param[14].toString());
		paramList.setValue(param[15].toString());
		paramList.setValue(param[16].toString());
		paramList.setValue(param[17].toString());
		paramList.setValue(param[18].toString());
		paramList.setValue(param[19].toString());
		paramList.setValue(param[20].toString());
		paramList.setValue(param[21].toString());
		paramList.setValue(param[22].toString());
		paramList.setValue(param[23].toString());
		paramList.setValue(param[24].toString());
		paramList.setValue(param[25].toString());
		paramList.setValue(param[26].toString());

		// DBアクセスを実行します
		db_CN_T_SALES_INFO.executeBySqlDefine(paramList, CN_T_SALES_INFO_CN_INSERT_001);
	}

	/**
	 * SQLKEY(CN_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 executeZM_M_CD_NM_KANRI_CN_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_ZM_M_CD_NM_KANRI.selectBySqlDefine(paramList, ZM_M_CD_NM_KANRI_CN_SELECT_002);
	}
	
	/**
	 * SQLKEY(CN_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	SYSID
	 *			SEND_CNT
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCK_T_CUST_CN_SELECT_002(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_CN_SELECT_002);
	}
	
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * ファイルレコードチェック結果判定を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数にてメッセージID、処理中の件数、項目名を設定します。<br>
	 *
	 * 2.引数を元にエラーログの出力を行います。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param commonItem 共通電文
	 * @param strMsgId   メッセージID
	 * @param strTranNm  処理の名称
	 * @param strKey     読込レコードのキー
	 * @throws Exception    業務サービス内で発生した例外全般。
	 */
	private static void errMsgOut(JBSbatCommonItem commonItem, String strMsgId, String strTranNm, String strKey) throws Exception
	{
		
		if(ECNB0420KE.equals(strMsgId))
		{
			createResultFile(strOutFileNm, strFileYmd, strFileSeq, JCNStrConst.S_FILECHK_ERR_0101);
			// ANK-4069-00-00 DEL START
			//// FTP配信処理
			//ArrayList<String> ftpList = new ArrayList<String>();
			//ftpList.add(strOutFileNm);
			//boolean updFlg = JCNBatCommon.putFTP(commonItem, ftpList, JCNStrConst.S_IFID_CONTREP_SEND, new HashMap<String, Object>());
			//if(!updFlg)
			//{
			//	throw new JBSbatBusinessException(ECNB0320KE, new String[] {strOutFileNm});
			//}
			// ANK-4069-00-00 DEL END
			throw new JBSbatBusinessException(ECNB0420KE, new String[] {strTranNm, strKey});
		}
		return;
	}
	
	/**
	 * 処理結果ファイルの出力を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で出力ファイル名(フルパス)を設定します。<br>
	 *
	 * 2.引数をもとに処理結果ファイル(異常)を出力します。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param strFilePass    ファイル名。
	 * @param strMakeYmd     ファイル作成日。
	 * @param strFileFSeq    ファイル通番。
	 * @param strResultCd    エラーコード。
	 * @throws Exception    業務サービス内で発生した例外全般。
	 */
	private static void createResultFile(String strFilePass, String strMakeYmd, String strFileFSeq, String strResultCd) throws Exception
	{
		// 外部出力ファイルパス
		JBSbatOutputFileUtil outFile = new JBSbatOutputFileUtil(strFilePass);
		
		outFile.setEncode(JCNStrConst.SJIS);				// 文字コード
		outFile.setLine(JCNStrConst.S_LINE_SEPARAOR_LF);	// 改行コード
		// 空ファイルを生成
		outFile.createWriter();
		// 項目を設定
		JBSbatServiceInterfaceMap outTnmtDataMap1 = new JBSbatServiceInterfaceMap();
		outTnmtDataMap1.set(JBSbatCNIFE018.REC_KBN, JCNStrConst.S_FILECHK_REC_KBN_0);
		outTnmtDataMap1.set(JBSbatCNIFE018.FILE_CREATE_DATE, strMakeYmd);
		outTnmtDataMap1.set(JBSbatCNIFE018.FILE_SEQ, strFileFSeq);
		outTnmtDataMap1.set(JBSbatCNIFE018.RESULT_CD, strResultCd);
		
		try
		{
			// 出力対象DEFファイルその1
			String defFile1 = JBSbatAplConst.getAplConstValue(JCNStrConst.S_CN_DEF_DIR)
								+ JCNStrConst.S_CONT_SVC_REP_DEF;								// ファイル定義フルパス
			JBSbatDefFileUtil defTnmtUtil1 = new JBSbatDefFileUtil(defFile1, outFile);
			outFile.print(outTnmtDataMap1, defTnmtUtil1);
			
		}
		catch (IOException ie)
		{
			throw ie;
		}
		finally
		{
			outFile.close();
		}
	}
	
	/**
	 * ファイル読み込み処理を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で読込ファイルディレクトリ(フルパス)を設定します。<br>
	 *
	 * 2.引数を元にファイル読込を行い、行をListへ格納します。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param strFileDir    出力ディレクトリ(フルパス)。
	 * @return resultList   返却用List
	 * @throws Exception    業務サービス内で発生した例外全般。
	 */
	private static ArrayList<String> readFile(String strFileDir) throws Exception
	{
		ArrayList<String> resultList = new  ArrayList<String>();
		
		// 外部出力ファイルパス
		JBSbatInputFileUtil inFile = new JBSbatInputFileUtil(strFileDir);
		inFile.setEncode(JCNStrConst.SJIS);						// 文字コード
		inFile.setLine(JCNStrConst.S_LINE_SEPARAOR_LF);			// 改行コード
		inFile.createReader();
		
		try
		{
			while(true)
			{
				String line = inFile.readLine();
				if(line == null)
				{
					inFile.close();
					break;
				}
				resultList.add(line);
			}
			
			return resultList;
		}
		catch (IOException e)
		{
			throw e;
		}
		finally
		{
			inFile.close();
		}
	}
}
