/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatDKTkkikiMdlFixMaint
*	ソースファイル名	：JBSbatDKTkkikiMdlFixMaint.java
*	作成者				：富士通　
*	作成日				：2018年12月19日
*＜機能概要＞
*　宅内機器型式コード確定条件メンテナンス部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v40.00.00	2018/12/19	FJ)謝		【ANK-3412-02-00】【５ギガ・１０ギガ】型確定マスタメンテナンス機能追加 新規作成
*	v56.00.00   2021/09/02  GDC)J.Hortilano   【ANK-4038-00-00】光ローゼット化対応
*	v61.00.00	2023/04/04	GDC）v.auditor	【ANK-4315-00-00】【eo定期】 eoホームゲートウェイ導入対応_Step3
*********************************************************************/
package eo.business.service;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JCCbatShoriIraiUtil;
import eo.business.util.file.JBSbatDKIFM116;
import eo.business.util.table.JBSbatCC_T_DLYD_TRN_REQ;
import eo.business.util.table.JBSbatDK_M_TKKIKI_MDL_FIX;
import eo.common.constant.JDKStrConst;
import eo.common.util.JDKCommonUtil;
import eo.common.util.JPCUtilCommon;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JBSbatBusinessFileUtil;
import eo.framework.util.JBSbatCheckUtil;
import eo.framework.util.JBSbatDateUtil;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatDKTkkikiMdlFixMaint extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(宅内機器型式コード確定条件)*/
	private static final String D_TBL_NAME_DK_M_TKKIKI_MDL_FIX = "DK_M_TKKIKI_MDL_FIX";

	/** テーブル(宅内機器型式)*/
	private static final String D_TBL_NAME_ZM_M_TAKNKIKI_MODEL = "ZM_M_TAKNKIKI_MODEL";

	/** テーブル(ダウンロードファイル管理)*/
	private static final String D_TBL_NAME_ZM_T_DL_FILE_KANRI = "ZM_T_DL_FILE_KANRI";

	/** SQL定義キー(DK_SELECT_017)*/
	private static final String DK_M_TKKIKI_MDL_FIX_DK_SELECT_017 = "DK_SELECT_017";

	/** SQL定義キー(DK_INSERT_003)*/
	private static final String ZM_T_DL_FILE_KANRI_DK_INSERT_003 = "DK_INSERT_003";

	/** テーブルアクセスクラス(宅内機器型式コード確定条件)*/
	private JBSbatSQLAccess db_DK_M_TKKIKI_MDL_FIX = null;

	/** テーブルアクセスクラス(宅内機器型式)*/
	private JBSbatSQLAccess db_ZM_M_TAKNKIKI_MODEL = null;

	/** テーブルアクセスクラス(ダウンロードファイル管理)*/
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 宅内機器型式コード確定条件メンテナンスファイルの定義ファイル名 */
	private static final String DKIFM116_DEF = "DKIFM116.def";
	
	/** 宅内機器型式コード確定条件メンテナンス結果ファイルのファイル名 */
	private static final String DKIFM117_FILE_NM = "DKIFM117.csv";
	
	/** ファイルコード */
	private static final String FILE_CD = "0000";
	
	/** 処理管理番号 */
	private static final String TRN_KANRI_NO = "000000000198";
	
	/** 出力ファイル名編集用 */
	private static final String DKLST025_FILE_NM = "DKLST025_DK_M_TKKIKI_MDL_FIX_RSLT_yyyyMMddhhmmss.csv";
	
	/** ヘッダ編集用＿キー情報 */
	private static final String H_KEY_INFO = "キー情報";
	
	/** ヘッダ編集用＿エラー内容 */
	private static final String H_ERR_NAIYO = "エラー内容";
	
	/** キー情報編集用＿宅内機器型式コード確定条件番号 */
	private static final String K_TKKIKI_MDL_CD_FIX_NO = "【宅内機器型式コード確定条件番号】%1%";
	
	/** キー情報編集用＿宅内機器型式コード確定グループコード */
	private static final String K_TAKNKIKI_MDL_CD_FIX_GRP_CD = "【宅内機器型式コード確定グループコード】%1%";
	
	/** キー情報編集用＿メーカーコード */
	private static final String K_MAKER_CD = "【メーカーコード】%1%";
	
	/** キー情報編集用＿親PONバージョン識別コード */
	private static final String K_OYA_PON_VSN_SKCD = "【親PONバージョン識別コード】%1%";
	
	/** キー情報編集用＿料金コースPON条件コード */
	private static final String K_PCRS_PON_JOKEN_CD = "【料金コースPON条件コード】%1%";
	
	// ANK-4038-00-00 ADD START
	/** ヘッダ編集用＿ローゼット設置状態コード */
	private static final String K_ROZETT_STC_STAT_CD = "【ローゼット設置状態コード】%1%";
	// ANK-4038-00-00 ADD END
	
	/** キー情報編集用＿適用開始年月日 */
	private static final String K_TSTAYMD = "【適用開始年月日】%1%";
	
	/** キー情報編集用＿適用終了年月日 */
	private static final String K_TENDYMD = "【適用終了年月日】%1%";
	
	/** エラー内容編集用＿宅内機器型式コード確定条件マスタチェックエラー */
	private static final String E_TKKIKI_MDL_CD_FIX_MST_CHK = "%1%が変更されています。";
	
	/** エラー内容編集用＿属性エラー */
	private static final String E_ZOKU = "%1%は属性エラーです。";
	
	/** エラー内容編集用＿桁数エラー */
	private static final String E_DIGITNO = "%1%は桁数エラーです。";
	
	/** エラー内容編集用＿必須エラー */
	private static final String E_HISSU = "%1%は必須エラーです。";
	
	/** エラー内容編集用＿適用開始年月日、適用終了年月日逆転チェックエラー */
	private static final String E_TSTAYMD_TENDYMD_GYAKU_CHK = "適用開始年月日が適用終了年月日より未来日です。";
	
	/** エラー内容編集用＿適用開始日エラー */
	private static final String E_TSTAYMD = "適用開始年月日が20100101ではありません。";
	
	/** エラー内容編集用＿適用終了日エラー */
	private static final String E_TENDYMD = "適用終了年月日が20991231ではありません。";
	
	/** エラー内容編集用＿適用開始年月日、適用終了年月日妥当性チェックエラー */
	private static final String E_TSTAYMD_TENDYMD_DATO_CHK = "適用終了年月日と適用開始年月日の間隔が不正です。";
	
	/** エラー内容編集用＿適用開始年月日、適用終了年月日全セット同日エラー */
	private static final String E_TSTAYMD_TENDYMD_SET_SAME = "適用開始年月日と適用終了年月日が全セット同日ではありません。";
	
	/** エラー内容編集用＿宅内機器型式コードマスタ存在チェックエラー */
	private static final String E_TAKNKIKI_MODEL_MST_CHK = "宅内機器型式コードが存在しない型式です。";
	
	/** エラー内容編集用＿在庫比率エラー */
	private static final String E_ZAIKO_RT = "在庫比率が0です。";
	
	/** エラー内容編集用＿エラーなし */
	private static final String E_ERR_NON = "エラーなし";
	
	/** 置換文字列＿宅内機器型式コード確定グループコード */
	private static final String NM_TAKNKIKI_MDL_CD_FIX_GRP_CD = "宅内機器型式コード確定グループコード";
	
	/** 置換文字列＿メーカーコード */
	private static final String NM_MAKER_CD = "メーカーコード";
	
	/** 置換文字列＿親PONバージョン識別コード */
	private static final String NM_OYA_PON_VSN_SKCD = "親PONバージョン識別コード";
	
	/** 置換文字列＿料金コースPON条件コード */
	private static final String NM_PCRS_PON_JOKEN_CD = "料金コースPON条件コード";
	
	// ANK-4038-00-00 ADD START
	/** 置換文字列＿ローゼット設置状態コード */
	private static final String NM_ROZETT_STC_STAT_CD = "ローゼット設置状態コード";
	// ANK-4038-00-00 ADD END
	
	/** 置換文字列＿適用開始年月日 */
	private static final String NM_TSTAYMD = "適用開始年月日";
	
	/** 置換文字列＿適用終了年月日 */
	private static final String NM_TENDYMD = "適用終了年月日";
	
	/** 置換文字列＿宅内機器型式コード */
	private static final String NM_TAKNKIKI_MODEL_CD = "宅内機器型式コード";
	
	/** 置換文字列＿在庫比率 */
	private static final String NM_ZAIKO_RT = "在庫比率";
	
	/** 年月日＿20100101 */
	private static final String YMD_20100101 = "20100101";
	
	/** 年月日＿20991231 */
	private static final String YMD_20991231 = "20991231";
	
	/** エラーフラグ */
	private boolean errFlg = false;
	
	/** 宅内機器型式コード確定条件メンテナンス結果ファイルの件数 */
	private int dkifm117Cnt = 0;
	
	/** 宅内機器型式コード確定条件メンテナンス結果ファイルのファイルオブジェクト */
	private JBSbatBusinessFileUtil dkifm117FileObj = null;
	
	/** ディレイド処理依頼番号 **/
	private String shoriIraiNo = null;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_DK_M_TKKIKI_MDL_FIX = new JBSbatSQLAccess(commonItem, D_TBL_NAME_DK_M_TKKIKI_MDL_FIX);
		db_ZM_M_TAKNKIKI_MODEL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_TAKNKIKI_MODEL);
		db_ZM_T_DL_FILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_DL_FILE_KANRI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// ディレイド処理依頼情報リストを取得する
		List<HashMap<String, Object>> shoriIraiList = JCCbatShoriIraiUtil.getShoriIraiInfo(commonItem, this.jobid);
		
		// ディレイド処理依頼情報リストが取得できない場合、処理を終了する
		if (shoriIraiList == null || shoriIraiList.size() == 0)
		{
			return null;
		}
		
		// フリー項目を取得する
		String[] freeItems = freeItem.split(JDKStrConst.FREE_DLMT);
		
		// 宅内機器型式コード確定条件メンテナンス結果ファイルのファイルパス
		String dkifm117FilePath = freeItems[0] + DKIFM117_FILE_NM;
		
		// 宅内機器型式コード確定条件メンテナンスファイルの定義ファイルパスを取得する
		String dkifm116DefFilePath = JBSbatAplConst.getAplConstValue(JDKStrConst.DK_DIR_IND) + DKIFM116_DEF;
		
		try
		{
			// ディレイド処理依頼情報リストの件数分繰り返す
			for (HashMap<String, Object> shoriIrai : shoriIraiList)
			{
				// ディレイド処理依頼番号
				shoriIraiNo = (String)shoriIrai.get(JBSbatCC_T_DLYD_TRN_REQ.DLYD_TRN_REQ_NO);
				
				// エラーフラグ
				errFlg = false;
				
				// 宅内機器型式コード確定条件メンテナンス結果ファイルの件数
				dkifm117Cnt = 0;
				
				// 宅内機器型式コード確定条件メンテナンス結果ファイルのファイルオブジェクト
				dkifm117FileObj = JCCBatCommon.createBusinessFileUtil(
						dkifm117FilePath, JDKStrConst.ENCODE_SJIS2, JDKStrConst.LINE_SEPARATOR, JDKStrConst.COMMA);
				
				// 宅内機器型式コード確定条件メンテナンスファイルの件数
				int dkifm116Cnt = 0;
				
				// 電子ファイル管理から宅内機器型式コード確定条件メンテナンスファイルを取得する
				String dkifm116FilePath = JCCBatCommon.searchDenshiFile(commonItem, (String)shoriIrai.get(JBSbatCC_T_DLYD_TRN_REQ.INPUT_EFILE_KANRI_NO));
				
				// 宅内機器型式コード確定条件メンテナンスファイルのファイルオブジェクトを生成する
				JBSbatInputFileUtil dkifm116FileUtil = new JBSbatInputFileUtil(dkifm116FilePath);
				
				// 宅内機器型式コード確定条件メンテナンスファイルの定義ファイルオブジェクトを生成する
				JBSbatDefFileUtil dkifm116FileDef = new JBSbatDefFileUtil(dkifm116DefFilePath, dkifm116FileUtil);
				
				// Readerオブジェクトを生成する
				dkifm116FileUtil.createReader();
				
				// 宅内機器型式コード確定条件メンテナンス結果ファイルにヘッダ部を出力する
				createDkifm117(H_KEY_INFO, H_ERR_NAIYO);
				
				// 宅内機器型式コード確定条件メンテナンスファイルのデータリスト
				ArrayList<JBSbatServiceInterfaceMap> dkifm116DataList = new ArrayList<JBSbatServiceInterfaceMap>();
				
				// 宅内機器型式コード確定条件メンテナンスファイルの件数分繰り返す
				while (dkifm116FileUtil.ready())
				{
					// ファイルから１レコードを取得する
					String dkifm116Line = dkifm116FileUtil.readLine();
					
					// 宅内機器型式コード確定条件メンテナンスファイルの件数カウント
					dkifm116Cnt++;
					
					// ヘッダレコードの場合、処理をスキップする
					if (dkifm116Cnt == 1)
					{
						continue;
					}
					
					// 宅内機器型式コード確定条件メンテナンスファイルのデータマップ
					JBSbatServiceInterfaceMap dkifm116DataMap = dkifm116FileDef.lineToObject(dkifm116Line, dkifm116FileUtil, dkifm116Cnt);
					
					// 宅内機器型式コード確定条件マスタチェックを行う
					tkkikiMdlCdFixMstChk(dkifm116DataMap);
					
					// 宅内機器型式コード確定条件メンテナンスファイルのデータリストに追加する
					dkifm116DataList.add(dkifm116DataMap);
				}
				
				// 必須・桁数・属性・日付逆転・型式存在チェックを行う
				if (!errFlg)
				{
					singleChk(dkifm116DataList);
				}
				
				// 日付チェック１を行う
				if (!errFlg)
				{
					hizukeChk1(dkifm116DataList);
				}
				
				// 日付チェック２を行う
				if (!errFlg)
				{
					hizukeChk2(dkifm116DataList);
				}
				
				// 在庫比率チェックを行う
				if (!errFlg)
				{
					zaikoRtChk(dkifm116DataList);
				}
				
				// チェックOKの場合
				if (!errFlg)
				{
					createDkifm117("", E_ERR_NON);
				}
				
				// 宅内機器型式コード確定条件メンテナンス結果ファイルを閉じる
				JCCBatCommon.closeBusinessFileUtil(dkifm117FileObj);
				
				// 電子ファイル管理登録処理
				JBSbatCommonItem arg0 = commonItem;								// 業務共通電文
				String arg1 = FILE_CD;											// ファイルコード
				String arg2 = dkifm117FilePath;									// ファイルパス
				String arg3 = JBSbatDateUtil.adjustMonth(super.opeDate, 1);		// ファイル削除年月日（運用日付 + 1ヶ月）
				String[] rc = JCCBatCommon.createDenshiFile(arg0, arg1, arg2, arg3);
				
				// ログ出力
				super.logPrint.printDebugLog("電子ファイル管理番号(" + rc[0] +  ")、世代登録年月日時分秒(" + rc[1] + ")");
				
				// システム日時を取得する
				String sysDateTime = JCCBatCommon.getSysDateTime();
				
				// ダウンロードファイル管理登録処理
				String[] setParam = new String[5];
				String dklst025FileName = DKLST025_FILE_NM.replaceAll(JDKStrConst.FILE_TIMESTAMP_FORMAT, sysDateTime);
				setParam[0] = TRN_KANRI_NO;							// 処理管理番号
				setParam[1] = dklst025FileName;						// ファイル名
				setParam[2] = String.valueOf(dkifm117Cnt);			// データ件数
				setParam[3] = rc[0];								// 電子ファイル管理番号
				setParam[4] = rc[1];								// 世代登録年月日時分秒
				executeZM_T_DL_FILE_KANRI_DK_INSERT_003(setParam);
				
				// 一時ファイルを削除する
				File dkifm117File = new File(dkifm117FilePath);
				if (dkifm117File.exists())
				{
					dkifm117File.delete();
				}
				
				// ディレイド処理依頼結果更新
				// エラーフラグがtrueの場合
				if (errFlg)
				{
					JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, JDKStrConst.DLYD_TRN_RSLT_CD_APP_ERR, null);
				}
				// エラーフラグがfalseの場合
				else
				{
					JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, JDKStrConst.DLYD_TRN_RSLT_CD_COMPLETE, null);
				}
				
				// コネクションのコミット
				commonItem.getConnection().commit();
			}
		} 
		catch (Exception e) 
		{
			// コネクションのロールバック
			commonItem.getConnection().rollback();
			
			// ディレイド処理依頼結果更新
			JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, JDKStrConst.DLYD_TRN_RSLT_CD_APP_ERR, null);
			
			// コネクションのコミット
			commonItem.getConnection().commit();
			throw e;
		}
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_DK_M_TKKIKI_MDL_FIX.close();
		db_ZM_M_TAKNKIKI_MODEL.close();
		db_ZM_T_DL_FILE_KANRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	TKKIKI_MDL_CD_FIX_NO
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeDK_M_TKKIKI_MDL_FIX_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("TKKIKI_MDL_CD_FIX_NO", whereParam[0]);

		// DBアクセスを実行します
		return db_DK_M_TKKIKI_MDL_FIX.selectByPrimaryKeysForUpdateWait(whereMap);
	}

	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	TAKNKIKI_MODEL_CD
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeZM_M_TAKNKIKI_MODEL_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("TAKNKIKI_MODEL_CD", whereParam[0]);

		// DBアクセスを実行します
		return db_ZM_M_TAKNKIKI_MODEL.selectByPrimaryKeys(whereMap);
	}

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	適用開始年月日				TSTAYMD
	 *		 	適用終了年月日				TENDYMD
	 *		 	宅内機器型式コード				TAKNKIKI_MODEL_CD
	 *		 	在庫比率				ZAIKO_RT
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	TKKIKI_MDL_CD_FIX_NO
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeDK_M_TKKIKI_MDL_FIX_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("TSTAYMD", setParam[0]);
		setMap.setValue("TENDYMD", setParam[1]);
		setMap.setValue("TAKNKIKI_MODEL_CD", setParam[2]);
		setMap.setValue("ZAIKO_RT", setParam[3]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("TKKIKI_MDL_CD_FIX_NO", whereParam[0]);

		// DBアクセスを実行します
		db_DK_M_TKKIKI_MDL_FIX.updateByPrimaryKeys(whereMap, setMap);
	}

	/**
	 * SQLKEY(DK_SELECT_017)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeDK_M_TKKIKI_MDL_FIX_DK_SELECT_017(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();

		// DBアクセスを実行します
		db_DK_M_TKKIKI_MDL_FIX.selectBySqlDefine(paramList, DK_M_TKKIKI_MDL_FIX_DK_SELECT_017);
	}

	/**
	 * SQLKEY(DK_INSERT_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 executeZM_T_DL_FILE_KANRI_DK_INSERT_003(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_DK_INSERT_003);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 宅内機器型式コード確定条件マスタチェックを行う。<br>
	 * @param dkifm116DataMap 宅内機器型式コード確定条件メンテナンスファイルのデータマップ
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void tkkikiMdlCdFixMstChk(JBSbatServiceInterfaceMap dkifm116DataMap) throws Exception
	{
		// 宅内機器型式コード確定条件番号
		String tkkikiMdlCdFixNo = JPCUtilCommon.fillZero(
				JBSbatStringUtil.Rtrim((String)dkifm116DataMap.getMap().get(JBSbatDKIFM116.TKKIKI_MDL_CD_FIX_NO)), 3, false);
		// 宅内機器型式コード確定グループコード
		String taknkikiMdlCdFixGrpCd = JBSbatStringUtil.Rtrim((String)dkifm116DataMap.getMap().get(JBSbatDKIFM116.TAKNKIKI_MDL_CD_FIX_GRP_CD));
		// メーカーコード
		String makerCd = JBSbatStringUtil.Rtrim((String)dkifm116DataMap.getMap().get(JBSbatDKIFM116.MAKER_CD));
		// 親ＰＯＮバージョン識別コード
		String oyaPonVsnSkcd = JBSbatStringUtil.Rtrim((String)dkifm116DataMap.getMap().get(JBSbatDKIFM116.OYA_PON_VSN_SKCD));
		// 料金コースＰＯＮ条件コード
		String pcrsPonJokenCd = JBSbatStringUtil.Rtrim((String)dkifm116DataMap.getMap().get(JBSbatDKIFM116.PCRS_PON_JOKEN_CD));
		// ANK-4038-00-00 ADD START
		// ローゼット設置状態コード
		String rozettStcStatCd = JBSbatStringUtil.Rtrim((String)dkifm116DataMap.getMap().get(JBSbatDKIFM116.ROZETT_STC_STAT_CD));
		// ANK-4038-00-00 ADD END
		
		// 宅内機器型式コード確定条件のPK検索を行う
		String[] selectWhereParam = new String[1];
		selectWhereParam[0] = tkkikiMdlCdFixNo;
		JBSbatCommonDBInterface tkkikiMdlFixMap = executeDK_M_TKKIKI_MDL_FIX_PKSELECT(selectWhereParam);
		
		if (tkkikiMdlFixMap != null)
		{
			// 宅内機器型式コード確定グループコードが変更されている場合
			if (!taknkikiMdlCdFixGrpCd.equals(JBSbatStringUtil.Rtrim(tkkikiMdlFixMap.getString(JBSbatDK_M_TKKIKI_MDL_FIX.TAKNKIKI_MDL_CD_FIX_GRP_CD))))
			{
				// 宅内機器型式コード確定条件マスタチェックエラー
				createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", tkkikiMdlCdFixNo), E_TKKIKI_MDL_CD_FIX_MST_CHK.replace("%1%", NM_TAKNKIKI_MDL_CD_FIX_GRP_CD));
				errFlg = true;
			}
			
			// メーカーコードが変更されている場合
			if (!makerCd.equals(JBSbatStringUtil.Rtrim(tkkikiMdlFixMap.getString(JBSbatDK_M_TKKIKI_MDL_FIX.MAKER_CD))))
			{
				// 宅内機器型式コード確定条件マスタチェックエラー
				createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", tkkikiMdlCdFixNo), E_TKKIKI_MDL_CD_FIX_MST_CHK.replace("%1%", NM_MAKER_CD));
				errFlg = true;
			}
			
			// 親ＰＯＮバージョン識別コードが変更されている場合
			if (!oyaPonVsnSkcd.equals(JBSbatStringUtil.Rtrim(tkkikiMdlFixMap.getString(JBSbatDK_M_TKKIKI_MDL_FIX.OYA_PON_VSN_SKCD))))
			{
				// 宅内機器型式コード確定条件マスタチェックエラー
				createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", tkkikiMdlCdFixNo), E_TKKIKI_MDL_CD_FIX_MST_CHK.replace("%1%", NM_OYA_PON_VSN_SKCD));
				errFlg = true;
			}
			
			// 料金コースＰＯＮ条件コードが変更されている場合
			if (!pcrsPonJokenCd.equals(JBSbatStringUtil.Rtrim(tkkikiMdlFixMap.getString(JBSbatDK_M_TKKIKI_MDL_FIX.PCRS_PON_JOKEN_CD))))
			{
				// 宅内機器型式コード確定条件マスタチェックエラー
				createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", tkkikiMdlCdFixNo), E_TKKIKI_MDL_CD_FIX_MST_CHK.replace("%1%", NM_PCRS_PON_JOKEN_CD));
				errFlg = true;
			}
			
			// ANK-4038-00-00 ADD START
			// ローゼット設置状態コードが変更されている場合
			if (!rozettStcStatCd.equals(JBSbatStringUtil.Rtrim(tkkikiMdlFixMap.getString(JBSbatDK_M_TKKIKI_MDL_FIX.ROZETT_STC_STAT_CD))))
			{
				// 宅内機器型式コード確定条件マスタチェックエラー
				createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", tkkikiMdlCdFixNo), E_TKKIKI_MDL_CD_FIX_MST_CHK.replace("%1%", NM_ROZETT_STC_STAT_CD));
				errFlg = true;
			}
			// ANK-4038-00-00 ADD END
		}
	}
	
	/**
	 * 必須・桁数・属性・日付逆転・型式存在チェックを行う<br>
	 * @param dkifm116DataList 宅内機器型式コード確定条件メンテナンスファイルのデータリスト
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void singleChk(ArrayList<JBSbatServiceInterfaceMap> dkifm116DataList) throws Exception
	{
		for (JBSbatServiceInterfaceMap dkifm116DataMap : dkifm116DataList)
		{
			// 宅内機器型式コード確定条件番号
			String tkkikiMdlCdFixNo = JPCUtilCommon.fillZero(
					JBSbatStringUtil.Rtrim((String)dkifm116DataMap.getMap().get(JBSbatDKIFM116.TKKIKI_MDL_CD_FIX_NO)), 3, false);
			// 適用開始年月日
			String tstaymd = JBSbatStringUtil.Rtrim((String)dkifm116DataMap.getMap().get(JBSbatDKIFM116.TSTAYMD));
			// 適用終了年月日
			String tendymd = JBSbatStringUtil.Rtrim((String)dkifm116DataMap.getMap().get(JBSbatDKIFM116.TENDYMD));
			// 宅内機器型式コード
			String taknkikiModelCd = JBSbatStringUtil.Rtrim((String)dkifm116DataMap.getMap().get(JBSbatDKIFM116.TAKNKIKI_MODEL_CD));
			// 在庫比率
			String zaikoRt = JBSbatStringUtil.Rtrim((String)dkifm116DataMap.getMap().get(JBSbatDKIFM116.ZAIKO_RT));
			// 日付エラーフラグ
			boolean hizukeErrFlg = false;
			
			// 適用開始年月日
			if (JDKCommonUtil.isNull(tstaymd))
			{
				// 必須エラー
				createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", tkkikiMdlCdFixNo), E_HISSU.replace("%1%", NM_TSTAYMD));
				errFlg = true;
				hizukeErrFlg = true;
			}
			else
			{
				if (!JBSbatCheckUtil.invoke(tstaymd, new String[]{"ketasuu2", "8", "8"}))
				{
					// 桁数エラー
					createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", tkkikiMdlCdFixNo), E_DIGITNO.replace("%1%", NM_TSTAYMD));
					errFlg = true;
					hizukeErrFlg = true;
				}
				else if (!JBSbatCheckUtil.invoke(tstaymd, new String[]{"year_month_day1"}))
				{
					// 属性エラー
					createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", tkkikiMdlCdFixNo), E_ZOKU.replace("%1%", NM_TSTAYMD));
					errFlg = true;
					hizukeErrFlg = true;
				}
			}
			
			// 適用終了年月日
			if (JDKCommonUtil.isNull(tendymd))
			{
				// 必須エラー
				createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", tkkikiMdlCdFixNo), E_HISSU.replace("%1%", NM_TENDYMD));
				errFlg = true;
				hizukeErrFlg = true;
			}
			else
			{
				if (!JBSbatCheckUtil.invoke(tendymd, new String[]{"ketasuu2", "8", "8"}))
				{
					// 桁数エラー
					createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", tkkikiMdlCdFixNo), E_DIGITNO.replace("%1%", NM_TENDYMD));
					errFlg = true;
					hizukeErrFlg = true;
				}
				else if (!JBSbatCheckUtil.invoke(tendymd, new String[]{"year_month_day1"}))
				{
					// 属性エラー
					createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", tkkikiMdlCdFixNo), E_ZOKU.replace("%1%", NM_TENDYMD));
					errFlg = true;
					hizukeErrFlg = true;
				}
			}
			
			// 在庫比率
			if (JDKCommonUtil.isNull(zaikoRt))
			{
				// 必須エラー
				createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", tkkikiMdlCdFixNo), E_HISSU.replace("%1%", NM_ZAIKO_RT));
				errFlg = true;
			}
			else
			{
				if (!JBSbatCheckUtil.invoke(zaikoRt, new String[]{"double_chk", "3", "1"}))
				{
					// 桁数エラー
					createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", tkkikiMdlCdFixNo), E_DIGITNO.replace("%1%", NM_ZAIKO_RT));
					errFlg = true;
				}
				else if (!JBSbatCheckUtil.invoke(zaikoRt, new String[]{"double1"}))
				{
					// 属性エラー
					createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", tkkikiMdlCdFixNo), E_ZOKU.replace("%1%", NM_ZAIKO_RT));
					errFlg = true;
				}
			}
			
			// 日付逆転チェック
			if (!hizukeErrFlg)
			{
				if (JPCUtilCommon.isFutureDate(tstaymd, tendymd, "0"))
				{
					// 日付逆転チェックエラー
					createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", tkkikiMdlCdFixNo), E_TSTAYMD_TENDYMD_GYAKU_CHK);
					errFlg = true;
				}
			}
			
			// 宅内機器型式コード
			if (JDKCommonUtil.isNull(taknkikiModelCd))
			{
				// 必須エラー
				createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", tkkikiMdlCdFixNo), E_HISSU.replace("%1%", NM_TAKNKIKI_MODEL_CD));
				errFlg = true;
			}
			else
			{
				// 宅内機器型式のPK検索を行う
				String[] selectWhereParam = new String[1];
				selectWhereParam[0] = taknkikiModelCd;
				JBSbatCommonDBInterface taknkikiModelMap = executeZM_M_TAKNKIKI_MODEL_PKSELECT(selectWhereParam);
				
				if (taknkikiModelMap == null)
				{
					// 宅内機器型式コードマスタ存在チェックエラー
					createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", tkkikiMdlCdFixNo), E_TAKNKIKI_MODEL_MST_CHK);
					errFlg = true;
				}
			}
		}
	}
	
	/**
	 * 日付チェック１を行う<br>
	 * @param dkifm116DataList 宅内機器型式コード確定条件メンテナンスファイルのデータリスト
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void hizukeChk1(ArrayList<JBSbatServiceInterfaceMap> dkifm116DataList) throws Exception
	{
		// セット数
		int setCnt = dkifm116DataList.size() / 3;
		for (int i = 0; i < setCnt; i++)
		{
			// １レコード目
			JBSbatServiceInterfaceMap dkifm116DataMap1 = dkifm116DataList.get(3 * i);
			// ２レコード目
			JBSbatServiceInterfaceMap dkifm116DataMap2 = dkifm116DataList.get(3 * i + 1);
			// ３レコード目
			JBSbatServiceInterfaceMap dkifm116DataMap3 = dkifm116DataList.get(3 * i + 2);
			// １レコード目の宅内機器型式コード確定条件番号
			String tkkikiMdlCdFixNo1 = JPCUtilCommon.fillZero(
					JBSbatStringUtil.Rtrim((String)dkifm116DataMap1.getMap().get(JBSbatDKIFM116.TKKIKI_MDL_CD_FIX_NO)), 3, false);
			// １レコード目の適用開始年月日
			String tstaymd1 = JBSbatStringUtil.Rtrim((String)dkifm116DataMap1.getMap().get(JBSbatDKIFM116.TSTAYMD));
			// １レコード目の適用終了年月日
			String tendymd1 = JBSbatStringUtil.Rtrim((String)dkifm116DataMap1.getMap().get(JBSbatDKIFM116.TENDYMD));
			// ２レコード目の宅内機器型式コード確定条件番号
			String tkkikiMdlCdFixNo2 = JPCUtilCommon.fillZero(
					JBSbatStringUtil.Rtrim((String)dkifm116DataMap2.getMap().get(JBSbatDKIFM116.TKKIKI_MDL_CD_FIX_NO)), 3, false);
			// ２レコード目の適用開始年月日
			String tstaymd2 = JBSbatStringUtil.Rtrim((String)dkifm116DataMap2.getMap().get(JBSbatDKIFM116.TSTAYMD));
			// ２レコード目の適用終了年月日
			String tendymd2 = JBSbatStringUtil.Rtrim((String)dkifm116DataMap2.getMap().get(JBSbatDKIFM116.TENDYMD));
			// ３レコード目の宅内機器型式コード確定条件番号
			String tkkikiMdlCdFixNo3 = JPCUtilCommon.fillZero(
					JBSbatStringUtil.Rtrim((String)dkifm116DataMap3.getMap().get(JBSbatDKIFM116.TKKIKI_MDL_CD_FIX_NO)), 3, false);
			// ３レコード目の適用開始年月日
			String tstaymd3 = JBSbatStringUtil.Rtrim((String)dkifm116DataMap3.getMap().get(JBSbatDKIFM116.TSTAYMD));
			// ３レコード目の適用終了年月日
			String tendymd3 = JBSbatStringUtil.Rtrim((String)dkifm116DataMap3.getMap().get(JBSbatDKIFM116.TENDYMD));
			// キー情報編集用
			StringBuilder keyInfoSb = null;
			
			// １レコード目の適用開始年月日が"20100101"でない場合
			if (!YMD_20100101.equals(tstaymd1))
			{
				// 適用開始日エラー
				createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", tkkikiMdlCdFixNo1), E_TSTAYMD);
				errFlg = true;
			}
			
			// ３レコード目の適用終了年月日が"20991231"でない場合
			if (!YMD_20991231.equals(tendymd3))
			{
				// 適用終了日エラー
				createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", tkkikiMdlCdFixNo3), E_TENDYMD);
				errFlg = true;
			}
			
			// １レコード目の適用終了年月日の翌日と２レコード目の適用開始年月日が一致しない場合
			if (!JPCUtilCommon.addDay(tendymd1, 1).equals(tstaymd2))
			{
				// 適用開始年月日、適用終了年月日妥当性チェックエラー
				keyInfoSb = new StringBuilder();
				keyInfoSb.append(tkkikiMdlCdFixNo1);
				keyInfoSb.append(JDKStrConst.TOUTEN);
				keyInfoSb.append(tkkikiMdlCdFixNo2);
				createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", keyInfoSb.toString()), E_TSTAYMD_TENDYMD_DATO_CHK);
				errFlg = true;
			}
			
			// ２レコード目の適用終了年月日の翌日と３レコード目の適用開始年月日が一致しない場合
			if (!JPCUtilCommon.addDay(tendymd2, 1).equals(tstaymd3))
			{
				// 適用開始年月日、適用終了年月日妥当性チェックエラー
				keyInfoSb = new StringBuilder();
				keyInfoSb.append(tkkikiMdlCdFixNo2);
				keyInfoSb.append(JDKStrConst.TOUTEN);
				keyInfoSb.append(tkkikiMdlCdFixNo3);
				createDkifm117(K_TKKIKI_MDL_CD_FIX_NO.replace("%1%", keyInfoSb.toString()), E_TSTAYMD_TENDYMD_DATO_CHK);
				errFlg = true;
			}
		}
	}
	
	/**
	 * 日付チェック２を行う<br>
	 * @param dkifm116DataList 宅内機器型式コード確定条件メンテナンスファイルのデータリスト
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void hizukeChk2(ArrayList<JBSbatServiceInterfaceMap> dkifm116DataList) throws Exception
	{
		// セット数
		int setCnt = dkifm116DataList.size() / 3;
		// 退避.宅内機器型式コード確定グループコード
		String taknkikiMdlCdFixGrpCdBk = "";
		// 退避.メーカーコード
		String makerCdBk = "";
		// 退避.親ＰＯＮバージョン識別コード
		String oyaPonVsnSkcdBk = "";
		// 退避.料金コースＰＯＮ条件コード
		String pcrsPonJokenCdBk = "";
		// ANK-4038-00-00 ADD START
		// 退避.ローゼット設置状態コード
		String rozettStcStatCdBk = "";
		// ANK-4038-00-00 ADD END
		// 退避.適用終了年月日１
		String tendymd1Bk = "";
		// 退避.適用開始年月日２
		String tstaymd2Bk = "";
		// 退避.適用終了年月日２
		String tendymd2Bk = "";
		// 退避.適用開始年月日３
		String tstaymd3Bk = "";
		// 同一グループエラー有無 false:エラーなし、true:エラーあり
		boolean groupErrUm = false;
		
		for (int i = 0; i < setCnt; i++)
		{
			// １レコード目
			JBSbatServiceInterfaceMap dkifm116DataMap1 = dkifm116DataList.get(3 * i);
			// ２レコード目
			JBSbatServiceInterfaceMap dkifm116DataMap2 = dkifm116DataList.get(3 * i + 1);
			// ３レコード目
			JBSbatServiceInterfaceMap dkifm116DataMap3 = dkifm116DataList.get(3 * i + 2);
			// １レコード目の宅内機器型式コード確定グループコード
			String taknkikiMdlCdFixGrpCd1 = JBSbatStringUtil.Rtrim((String)dkifm116DataMap1.getMap().get(JBSbatDKIFM116.TAKNKIKI_MDL_CD_FIX_GRP_CD));
			// １レコード目のメーカーコード
			String makerCd1 = JBSbatStringUtil.Rtrim((String)dkifm116DataMap1.getMap().get(JBSbatDKIFM116.MAKER_CD));
			// １レコード目の親ＰＯＮバージョン識別コード
			String oyaPonVsnSkcd1 = JBSbatStringUtil.Rtrim((String)dkifm116DataMap1.getMap().get(JBSbatDKIFM116.OYA_PON_VSN_SKCD));
			// １レコード目の料金コースＰＯＮ条件コード
			String pcrsPonJokenCd1 = JBSbatStringUtil.Rtrim((String)dkifm116DataMap1.getMap().get(JBSbatDKIFM116.PCRS_PON_JOKEN_CD));
			// ANK-4038-00-00 ADD START
			// １レコード目の料金コースＰＯＮ条件コード
			String rozettStcStatCd1 = JBSbatStringUtil.Rtrim((String)dkifm116DataMap1.getMap().get(JBSbatDKIFM116.ROZETT_STC_STAT_CD));
			// ANK-4038-00-00 ADD END
			// １レコード目の適用終了年月日
			String tendymd1 = JBSbatStringUtil.Rtrim((String)dkifm116DataMap1.getMap().get(JBSbatDKIFM116.TENDYMD));
			// ２レコード目の適用開始年月日
			String tstaymd2 = JBSbatStringUtil.Rtrim((String)dkifm116DataMap2.getMap().get(JBSbatDKIFM116.TSTAYMD));
			// ２レコード目の適用終了年月日
			String tendymd2 = JBSbatStringUtil.Rtrim((String)dkifm116DataMap2.getMap().get(JBSbatDKIFM116.TENDYMD));
			// ３レコード目の適用開始年月日
			String tstaymd3 = JBSbatStringUtil.Rtrim((String)dkifm116DataMap3.getMap().get(JBSbatDKIFM116.TSTAYMD));
			// キー情報編集用
			StringBuilder keyInfoSb = null;
			
			if (JDKStrConst.MTR1.equals(taknkikiMdlCdFixGrpCd1) || JDKStrConst.MTR2.equals(taknkikiMdlCdFixGrpCd1))
			{
				if (taknkikiMdlCdFixGrpCd1.equals(taknkikiMdlCdFixGrpCdBk))
				{
					if (groupErrUm)
					{
						continue;
					}
					if (!tendymd1.equals(tendymd1Bk)
							|| !tstaymd2.equals(tstaymd2Bk)
							|| !tendymd2.equals(tendymd2Bk)
							|| !tstaymd3.equals(tstaymd3Bk))
					{
						// 適用開始年月日、適用終了年月日全セット同日エラー
						createDkifm117(K_TAKNKIKI_MDL_CD_FIX_GRP_CD.replace("%1%", taknkikiMdlCdFixGrpCd1), E_TSTAYMD_TENDYMD_SET_SAME);
						errFlg = true;
						groupErrUm = true;
					}
				}
				else
				{
					taknkikiMdlCdFixGrpCdBk = taknkikiMdlCdFixGrpCd1;
					tendymd1Bk = tendymd1;
					tstaymd2Bk = tstaymd2;
					tendymd2Bk = tendymd2;
					tstaymd3Bk = tstaymd3;
					groupErrUm = false;
				}
			}
			else if (JDKStrConst.ONU2.equals(taknkikiMdlCdFixGrpCd1))
			{
				if (taknkikiMdlCdFixGrpCd1.equals(taknkikiMdlCdFixGrpCdBk)
						&& makerCd1.equals(makerCdBk)
						&& oyaPonVsnSkcd1.equals(oyaPonVsnSkcdBk)
						&& pcrsPonJokenCd1.equals(pcrsPonJokenCdBk)
						// ANK-4038-00-00 ADD START
						&& rozettStcStatCd1.equals(rozettStcStatCdBk))
					    // ANK-4038-00-00 ADD END
				{
					if (groupErrUm)
					{
						continue;
					}
					if (!tendymd1.equals(tendymd1Bk)
							|| !tstaymd2.equals(tstaymd2Bk)
							|| !tendymd2.equals(tendymd2Bk)
							|| !tstaymd3.equals(tstaymd3Bk))
					{
						// 適用開始年月日、適用終了年月日全セット同日エラー
						keyInfoSb = new StringBuilder();
						keyInfoSb.append(K_TAKNKIKI_MDL_CD_FIX_GRP_CD.replace("%1%", taknkikiMdlCdFixGrpCd1));
						keyInfoSb.append(JDKStrConst.TOUTEN);
						keyInfoSb.append(K_MAKER_CD.replace("%1%", makerCd1));
						keyInfoSb.append(JDKStrConst.TOUTEN);
						keyInfoSb.append(K_PCRS_PON_JOKEN_CD.replace("%1%", pcrsPonJokenCd1));
						// ANK-4038-00-00 ADD START
						keyInfoSb.append(JDKStrConst.TOUTEN);
						keyInfoSb.append(K_ROZETT_STC_STAT_CD.replace("%1%", rozettStcStatCd1));
						// ANK-4038-00-00 ADD END
						keyInfoSb.append(JDKStrConst.TOUTEN);
						keyInfoSb.append(K_OYA_PON_VSN_SKCD.replace("%1%", oyaPonVsnSkcd1));
						createDkifm117(keyInfoSb.toString(), E_TSTAYMD_TENDYMD_SET_SAME);
						errFlg = true;
						groupErrUm = true;
					}
				}
				else
				{
					taknkikiMdlCdFixGrpCdBk = taknkikiMdlCdFixGrpCd1;
					makerCdBk = makerCd1;
					oyaPonVsnSkcdBk = oyaPonVsnSkcd1;
					pcrsPonJokenCdBk = pcrsPonJokenCd1;
					// ANK-4038-00-00 ADD START
					rozettStcStatCdBk = rozettStcStatCd1;
					// ANK-4038-00-00 ADD END
					tendymd1Bk = tendymd1;
					tstaymd2Bk = tstaymd2;
					tendymd2Bk = tendymd2;
					tstaymd3Bk = tstaymd3;
					groupErrUm = false;
				}
			}
			// ANK-4315-00-00 ADD START
			else if (JDKStrConst.HGW1.equals(taknkikiMdlCdFixGrpCd1))
			{
				if (taknkikiMdlCdFixGrpCd1.equals(taknkikiMdlCdFixGrpCdBk)
						&& makerCd1.equals(makerCdBk))
				{
					if (groupErrUm)
					{
						continue;
					}
					if (!tendymd1.equals(tendymd1Bk)
							|| !tstaymd2.equals(tstaymd2Bk)
							|| !tendymd2.equals(tendymd2Bk)
							|| !tstaymd3.equals(tstaymd3Bk))
					{
						// 適用開始年月日、適用終了年月日全セット同日エラー
						keyInfoSb = new StringBuilder();
						keyInfoSb.append(K_TAKNKIKI_MDL_CD_FIX_GRP_CD.replace("%1%", taknkikiMdlCdFixGrpCd1));
						keyInfoSb.append(JDKStrConst.TOUTEN);
						keyInfoSb.append(K_MAKER_CD.replace("%1%", makerCd1));
						keyInfoSb.append(JDKStrConst.TOUTEN);
						createDkifm117(keyInfoSb.toString(), E_TSTAYMD_TENDYMD_SET_SAME);
						errFlg = true;
						groupErrUm = true;
					}
				}
				else
				{
					taknkikiMdlCdFixGrpCdBk = taknkikiMdlCdFixGrpCd1;
					makerCdBk = makerCd1;
					tendymd1Bk = tendymd1;
					tstaymd2Bk = tstaymd2;
					tendymd2Bk = tendymd2;
					tstaymd3Bk = tstaymd3;
					groupErrUm = false;
				}
			}
			// ANK-4315-00-00 ADD END
		}
	}
	
	/**
	 * 在庫比率チェックを行う<br>
	 * @param dkifm116DataList 宅内機器型式コード確定条件メンテナンスファイルのデータリスト
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void zaikoRtChk(ArrayList<JBSbatServiceInterfaceMap> dkifm116DataList) throws Exception
	{
		// キー情報編集用
		StringBuilder keyInfoSb = null;
		
		for (JBSbatServiceInterfaceMap dkifm116DataMap : dkifm116DataList)
		{
			// 宅内機器型式コード型確定条件のPK更新を行う
			String[] updateWhereParam = new String[1];
			String[] updateSetParam = new String[4];
			updateWhereParam[0] = JPCUtilCommon.fillZero(
					JBSbatStringUtil.Rtrim((String)dkifm116DataMap.getMap().get(JBSbatDKIFM116.TKKIKI_MDL_CD_FIX_NO)), 3, false);	// 宅内機器型式コード確定条件番号
			updateSetParam[0] = JBSbatStringUtil.Rtrim((String)dkifm116DataMap.getMap().get(JBSbatDKIFM116.TSTAYMD));				// 適用開始年月日
			updateSetParam[1] = JBSbatStringUtil.Rtrim((String)dkifm116DataMap.getMap().get(JBSbatDKIFM116.TENDYMD));				// 適用終了年月日
			updateSetParam[2] = JBSbatStringUtil.Rtrim((String)dkifm116DataMap.getMap().get(JBSbatDKIFM116.TAKNKIKI_MODEL_CD));		// 宅内機器型式コード
			updateSetParam[3] = JBSbatStringUtil.Rtrim((String)dkifm116DataMap.getMap().get(JBSbatDKIFM116.ZAIKO_RT));				// 在庫比率
			executeDK_M_TKKIKI_MDL_FIX_PKUPDATE(updateSetParam, updateWhereParam);
		}
		
		// 宅内機器型式コード確定条件の検索を行う
		executeDK_M_TKKIKI_MDL_FIX_DK_SELECT_017(new Object[]{});
		JBSbatCommonDBInterface tkkikiMdlFixMap = db_DK_M_TKKIKI_MDL_FIX.selectNext();
		
		while(tkkikiMdlFixMap != null)
		{
			// 宅内機器型式コード確定グループコード
			String taknkikiMdlCdFixGrpCd = JBSbatStringUtil.Rtrim(tkkikiMdlFixMap.getString(JBSbatDK_M_TKKIKI_MDL_FIX.TAKNKIKI_MDL_CD_FIX_GRP_CD));
			// メーカーコード
			String makerCd = JBSbatStringUtil.Rtrim(tkkikiMdlFixMap.getString(JBSbatDK_M_TKKIKI_MDL_FIX.MAKER_CD));
			// 親ＰＯＮバージョン識別コード
			String oyaPonVsnSkcd = JBSbatStringUtil.Rtrim(tkkikiMdlFixMap.getString(JBSbatDK_M_TKKIKI_MDL_FIX.OYA_PON_VSN_SKCD));
			// 料金コースＰＯＮ条件コード
			String pcrsPonJokenCd = JBSbatStringUtil.Rtrim(tkkikiMdlFixMap.getString(JBSbatDK_M_TKKIKI_MDL_FIX.PCRS_PON_JOKEN_CD));
			// ANK-4038-00-00 ADD START
			// 料金コースＰＯＮ条件コード
			String rozettStcStatCd = JBSbatStringUtil.Rtrim(tkkikiMdlFixMap.getString(JBSbatDK_M_TKKIKI_MDL_FIX.ROZETT_STC_STAT_CD));
			// ANK-4038-00-00 ADD END
			// 適用開始年月日
			String tstaymd = JBSbatStringUtil.Rtrim(tkkikiMdlFixMap.getString(JBSbatDK_M_TKKIKI_MDL_FIX.TSTAYMD));
			// 適用終了年月日
			String tendymd = JBSbatStringUtil.Rtrim(tkkikiMdlFixMap.getString(JBSbatDK_M_TKKIKI_MDL_FIX.TENDYMD));
			// 在庫比率(合計)
			double zaikoRtSum = Double.parseDouble(JBSbatStringUtil.Rtrim(tkkikiMdlFixMap.getString(JBSbatDK_M_TKKIKI_MDL_FIX.ZAIKO_RT)));
			
			// 在庫比率(合計)が0の場合
			if (zaikoRtSum == 0)
			{
				if (JDKStrConst.MTR1.equals(taknkikiMdlCdFixGrpCd) || JDKStrConst.MTR2.equals(taknkikiMdlCdFixGrpCd))
				{
					// 在庫比率エラー
					keyInfoSb = new StringBuilder();
					keyInfoSb.append(K_TAKNKIKI_MDL_CD_FIX_GRP_CD.replace("%1%", taknkikiMdlCdFixGrpCd));
					keyInfoSb.append(JDKStrConst.TOUTEN);
					keyInfoSb.append(K_TSTAYMD.replace("%1%", tstaymd));
					keyInfoSb.append(JDKStrConst.TOUTEN);
					keyInfoSb.append(K_TENDYMD.replace("%1%", tendymd));
					createDkifm117(keyInfoSb.toString(), E_ZAIKO_RT);
					errFlg = true;
				}
				else if (JDKStrConst.ONU2.equals(taknkikiMdlCdFixGrpCd))
				{
					// 在庫比率エラー
					keyInfoSb = new StringBuilder();
					keyInfoSb.append(K_TAKNKIKI_MDL_CD_FIX_GRP_CD.replace("%1%", taknkikiMdlCdFixGrpCd));
					keyInfoSb.append(JDKStrConst.TOUTEN);
					keyInfoSb.append(K_MAKER_CD.replace("%1%", makerCd));
					keyInfoSb.append(JDKStrConst.TOUTEN);
					keyInfoSb.append(K_PCRS_PON_JOKEN_CD.replace("%1%", pcrsPonJokenCd));
					keyInfoSb.append(JDKStrConst.TOUTEN);
					keyInfoSb.append(K_OYA_PON_VSN_SKCD.replace("%1%", oyaPonVsnSkcd));
					// ANK-4038-00-00 ADD START
					keyInfoSb.append(JDKStrConst.TOUTEN);
					keyInfoSb.append(K_ROZETT_STC_STAT_CD.replace("%1%", rozettStcStatCd));
					// ANK-4038-00-00 ADD END
					keyInfoSb.append(JDKStrConst.TOUTEN);
					keyInfoSb.append(K_TSTAYMD.replace("%1%", tstaymd));
					keyInfoSb.append(JDKStrConst.TOUTEN);
					keyInfoSb.append(K_TENDYMD.replace("%1%", tendymd));
					createDkifm117(keyInfoSb.toString(), E_ZAIKO_RT);
					errFlg = true;
				}
				// ANK-4315-00-00 ADD START
				else if (JDKStrConst.HGW1.equals(taknkikiMdlCdFixGrpCd))
				{
					// 在庫比率エラー
					keyInfoSb = new StringBuilder();
					keyInfoSb.append(K_TAKNKIKI_MDL_CD_FIX_GRP_CD.replace("%1%", taknkikiMdlCdFixGrpCd));
					keyInfoSb.append(JDKStrConst.TOUTEN);
					keyInfoSb.append(K_MAKER_CD.replace("%1%", makerCd));
					keyInfoSb.append(JDKStrConst.TOUTEN);
					keyInfoSb.append(K_TSTAYMD.replace("%1%", tstaymd));
					keyInfoSb.append(JDKStrConst.TOUTEN);
					keyInfoSb.append(K_TENDYMD.replace("%1%", tendymd));
					createDkifm117(keyInfoSb.toString(), E_ZAIKO_RT);
					errFlg = true;
				}
				// ANK-4315-00-00 ADD END
			}
			tkkikiMdlFixMap = db_DK_M_TKKIKI_MDL_FIX.selectNext();
		}
		
		// エラーフラグがtrueの場合
		if (errFlg)
		{
			// コネクションのロールバック
			commonItem.getConnection().rollback();
		}
	}
	
	/**
	 * 宅内機器型式コード確定条件メンテナンス結果ファイルを出力する。<br>
	 * @param keyInfo キー情報
	 * @param errNaiyo エラー内容
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void createDkifm117(String keyInfo, String errNaiyo) throws Exception
	{
		ArrayList<String> outputInfo = new ArrayList<String>();
		
		// キー情報
		outputInfo.add(keyInfo);
		// エラー内容
		outputInfo.add(errNaiyo);
		
		JCCBatCommon.printDoubleQuoteBusinessFileUtil(dkifm117FileObj, outputInfo);
		dkifm117Cnt++;
	}
}
