/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatAKDBSknChk
*	ソースファイル名	：JBSbatAKDBSknChk.java
*	作成者				：富士通　
*	作成日				：2013年06月17日
*＜機能概要＞
*　DB相関チェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2013/06/17   富士通		新規作成
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatMatchServiceInterface;
import eo.business.util.file.JBSbatAKIFM037;
import eo.business.util.file.JBSbatAKIFM038;
import eo.business.util.file.JBSbatAKIFM039;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatAKDBSknChk extends JBSbatBusinessService implements JBSbatMatchServiceInterface
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** キーマッチ処理フラグ*/
	private boolean matchProcFlg;

	/** マスタファイル処理フラグ*/
	private boolean mastProcFlg;

	/** トランファイル処理フラグ*/
	private boolean tranProcFlg;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}
	/** mastMapキー退避 */
	private String mastSkyKeiNo = null;

	/** 初回かどうか */
	private boolean firstFlg = true;
	/** 抑止有無 : 有(1) */
	private static final String YOKUSI_ARI = "1";
	/** 抑止有無 : 無(0) */
	private static final String YOKUSI_NASI = "0";
	
	/** 理由コード */
	private static final String RIYU_CD_01 = "01";
	private static final String RIYU_CD_02 = "02";
	private static final String RIYU_CD_03 = "03";
	private static final String RIYU_CD_04 = "04";
	private static final String RIYU_CD_05 = "05";
	private static final String RIYU_CD_06 = "06";
	
	private static final String RIYU_01 = "請求方法確認要";
	private static final String RIYU_02 = "債権内訳金額不一致";
	private static final String RIYU_03 = "請求額・債権額不一致";
	private static final String RIYU_04 = "合算請求抑止で未納合算あり";
	private static final String RIYU_05 = "未納合算債権あり";
	private static final String RIYU_06 = "未納あり・請求なし";
	
	private static final String STAT_60 = "60";
	private static final String STAT_61 = "61";
	private static final String STAT_62 = "62";
	private static final String STAT_90 = "90";
	private static final String STAT_99 = "99";
	
	/** 理由コードマップ */
	Map<String, Boolean> riyuCdMap = new HashMap<String, Boolean>();
	
	/** 同一請求契約番号のmastMapリスト */
	
	/** マスタ退避用マップ key:請求契約番号 value:請求契約番号毎のmastのデータリスト */
	private Map<String, List<JBSbatServiceInterfaceMap>> mastWk = new HashMap<String, List<JBSbatServiceInterfaceMap>>();
	/** トラン退避用マップ key:請求契約番号 value:請求契約番号毎のtranのデータリスト */
	private Map<String, List<JBSbatServiceInterfaceMap>> tranWk = new HashMap<String, List<JBSbatServiceInterfaceMap>>();
	
	/** 未納情報  キー情報(key:請求契約番 value:請求契約番) */
	private Map<String, String> tranSkyKeiMap = new HashMap<String, String>();
	/** 処理済み請求契約番号 */
	
	/**
	 * 主処理
	 * @param mastMap　入力電文
	 * @param tranMap　入力電文
	 * @param outputInItem  入力情報
	 * @return JBSbatOutputItem 出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap mastMap, JBSbatServiceInterfaceMap tranMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// トラン
		if (tranMap != null) {
			tranProcFlg = true;
			// 請求契約番号を取得
			String skyKeiNo = tranMap.getString(JBSbatAKIFM038.SEIKY_KEI_NO);
			
			if(!tranSkyKeiMap.containsKey(skyKeiNo)) {
				tranSkyKeiMap.put(skyKeiNo, skyKeiNo);
			}
			
			if (firstFlg) {
				// トラン１回目
				List<JBSbatServiceInterfaceMap> tranMapList = new ArrayList<JBSbatServiceInterfaceMap>();
				tranMapList.add(tranMap);
				tranWk.put(skyKeiNo, tranMapList);
			} else if (tranWk.containsKey(skyKeiNo)) {
				// 2回目以降　請求契約番号　一致
				// キーが存在する場合は
				tranWk.get(skyKeiNo).add(tranMap);
				
			} else {
				// 2回目以降　請求契約番号　不一致
				// キーが存在しない場合は
				List<JBSbatServiceInterfaceMap> tranMapList = new ArrayList<JBSbatServiceInterfaceMap>();
				tranMapList.add(tranMap);
				tranWk.put(skyKeiNo, tranMapList);
			}
		} else {
			// トランのデータを読み終えたら、マスタのデータを読み直す
			mastProcFlg = true;
		}
		
		// トラン退避が完了、もしくは初回呼び出し時
		if(mastProcFlg && mastMap != null) {
			String nowKey = mastMap.getString(JBSbatAKIFM037.SEIKY_KEI_NO);
			mastProcFlg = true;
			if (mastSkyKeiNo == null) {
				// １回目
				List<JBSbatServiceInterfaceMap> mastMapList = new ArrayList<JBSbatServiceInterfaceMap>();
				mastMapList.add(mastMap);
				mastWk.put(nowKey, mastMapList);
				mastSkyKeiNo = nowKey;
			} else if (mastMap.getString(JBSbatAKIFM037.SEIKY_NO) == null) {
				// 最終行の場合
				if(mastWk.containsKey(mastSkyKeiNo)) {
					// 直前に出力していない場合は、未出力情報が残っているので出力
					outputInItem = createOutputInItem(outputInItem,mastSkyKeiNo);
				}
				
				// 未納情報にのみ存在する請求契約番号が存在するかチェック
				outputInItem = createOutputInItemMinou(outputInItem);
				
		    } else if (mastSkyKeiNo.equals(nowKey)) {
				// 2回目以降かつキー一致
				// 同じ場合は出力用リストに追加
				mastWk.get(nowKey).add(mastMap);
				// 処理終了
			} else {
				// 2回目以降かつキー不一致
				// 出力ファイル情報生成
				outputInItem = createOutputInItem(outputInItem,mastSkyKeiNo);
				// 現在のマスタを退避する
				List<JBSbatServiceInterfaceMap> mastMapList = new ArrayList<JBSbatServiceInterfaceMap>();
				mastMapList.add(mastMap);
				mastWk.put(nowKey, mastMapList);
				mastSkyKeiNo = nowKey;
				// ファイルを出力します。
			}
		}
		
		// 初回フラグを折る
		firstFlg = false;
		
		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 理由コードマップを初期化します。
	 */
	private void clearAllRiyuCdMap() {
		riyuCdMap.put(RIYU_CD_01, false);
		riyuCdMap.put(RIYU_CD_02, false);
		riyuCdMap.put(RIYU_CD_03, false);
		riyuCdMap.put(RIYU_CD_04, false);
		riyuCdMap.put(RIYU_CD_05, false);
		riyuCdMap.put(RIYU_CD_06, false);
	}
	
	/**
	 * 出力ファイル情報設定処理
	 * @param outputInItem
	 * @return
	 * @throws Exception 
	 */
	private JBSbatOutputItem createOutputInItem(JBSbatOutputItem outputInItem, String skyKeiNo) throws Exception {
		// マスタのマップから指定の請求契約番号に紐づくリストを取得します。
		List<JBSbatServiceInterfaceMap> mainList = mastWk.get(skyKeiNo);
		
		// トランのマップから指定の請求契約番号に紐づくリストを取得します。
		List<JBSbatServiceInterfaceMap> tranList = tranWk.get(skyKeiNo);
		
		Map<String, String> mastNoYmMap = new HashMap<String, String>();
		Map<String, JBSbatServiceInterfaceMap> tranNoYmMap = new HashMap<String, JBSbatServiceInterfaceMap>();
		
		JBSbatServiceInterfaceMap main = mainList.get(0);
		
		// 理由コードの初期化
		clearAllRiyuCdMap();
		
		// G抑止有無
		String yksCd = YOKUSI_ARI;
		if(main.getString(JBSbatAKIFM037.GSN_SEIKY_YOKSI_CD) == null
				|| "".equals(main.getString(JBSbatAKIFM037.GSN_SEIKY_YOKSI_CD))) {
			yksCd = YOKUSI_NASI;
		}
		// B請求額(1件目)
		BigDecimal seikyuGak = new BigDecimal(main.getString(JBSbatAKIFM037.AMNT));
		// D請求年月(1件目)
		String ym = main.getString(JBSbatAKIFM037.SEIKY_YM);
		// C債権額（集計）
		BigDecimal saikenGakSum = new BigDecimal(0);
		String saikenGaku = null;
		// E最小年月
		String maxYm = main.getString(JBSbatAKIFM037.SAIKEN_YM);
		// F最大年月
		String minYm = main.getString(JBSbatAKIFM037.SAIKEN_YM);
		
		// マスタループ
		// 請求契約NO + 債権年月のマップ作成
		for (JBSbatServiceInterfaceMap mMap : mainList) {
			StringBuffer no = new StringBuffer(mMap.getString(JBSbatAKIFM037.SEIKY_KEI_NO));
			no.append(mMap.getString(JBSbatAKIFM037.SAIKEN_YM));
			mastNoYmMap.put(no.toString(), no.toString());
			
			// 債権額（集計）
			saikenGaku = mMap.getString(JBSbatAKIFM037.SEIKYU_AMNT);
			if (saikenGaku != null) {
				saikenGakSum = saikenGakSum.add(new BigDecimal(saikenGaku));
			}
			
			// 最大年月
			// 最小年月
			if(!mMap.getString(JBSbatAKIFM037.SAIKEN_YM).isEmpty()) {
				if(mMap.getString(JBSbatAKIFM037.SAIKEN_YM).compareTo(maxYm) > 0) {
					maxYm = mMap.getString(JBSbatAKIFM037.SAIKEN_YM);
				}
				if(mMap.getString(JBSbatAKIFM037.SAIKEN_YM).compareTo(minYm) < 0) {
					minYm = mMap.getString(JBSbatAKIFM037.SAIKEN_YM);
				}
			}
		}
		
		// トランループ
		if (tranList != null) {
			// 請求契約NO + 債権年月のマップ作成
			for (JBSbatServiceInterfaceMap tMap : tranList) {
				StringBuffer no = new StringBuffer(tMap.getString(JBSbatAKIFM038.SEIKY_KEI_NO));
				no.append(tMap.getString(JBSbatAKIFM038.SAIKEN_YM));
				tranNoYmMap.put(no.toString(), tMap);
			}
		}
		
		//////////////////////////////////////////////////////////////////////////////////////
		// チェック３
		//////////////////////////////////////////////////////////////////////////////////////
		if (!(seikyuGak.compareTo(saikenGakSum) == 0)) {
			riyuCdMap.put(RIYU_CD_03, true);
		}
		
		if(YOKUSI_ARI.equals(yksCd)) {
			// 抑止あり
			if(!(ym.compareTo(maxYm) == 0 && ym.compareTo(minYm) == 0)) {
				// D＝E＝Fでない場合
				riyuCdMap.put(RIYU_CD_04, true);
			}
		} else {
			// 抑止なし
			for(Map.Entry<String, JBSbatServiceInterfaceMap> target : tranNoYmMap.entrySet()) {
				// トランの請求契約番号 + 請求年月がマスタに存在するかチェック
				if(!mastNoYmMap.containsKey(target.getKey())) {
					// 抑止なしかつ、マスタに存在しない、督促年月がトランが存在する場合
					// 理由コード：05　未納合算債権あり
					JBSbatServiceInterfaceMap outPutData = map038(target.getValue(),true,false);
					outputInItem.addOutMapList(outPutData);
				}
			}
		}
		
		// 出力対象判定フラグ
		boolean outFlg = false;
		
		for (JBSbatServiceInterfaceMap rec : mainList) {
			// 出力判定フラグ初期化
			outFlg = false;
			
			String cd = rec.getString(JBSbatAKIFM037.KEI_SEIKY_WAY_CD);
			String cdYoso = rec.getString(JBSbatAKIFM037.SEIKY_WAY_CD_YOSO);
			
			BigDecimal seiGak = new BigDecimal(rec.getString(JBSbatAKIFM037.SEIKYU_AMNT));
			BigDecimal misGak = new BigDecimal(rec.getString(JBSbatAKIFM037.MISHU_AMNT));
			
			if(!cd.equals(cdYoso)) {
				//////////////////////////////////////////////////////////////////////////////////////
				// チェック１　…　請求方法コード≠請求方法コード予想の場合、警告対象として出力する。
				//////////////////////////////////////////////////////////////////////////////////////
				riyuCdMap.put(RIYU_CD_01, true);
			}else{
				riyuCdMap.put(RIYU_CD_01, false);
			}
			
			if (seiGak.compareTo(misGak) != 0) {
				//////////////////////////////////////////////////////////////////////////////////////
				// チェック２　…　請求方法コード≠請求方法コード予想の場合、警告対象として出力する。
				//////////////////////////////////////////////////////////////////////////////////////
				riyuCdMap.put(RIYU_CD_02, true);
			}else{
				riyuCdMap.put(RIYU_CD_02, false);
			}
			
			// 理由コードマップのValue値にTrueが存在する場合は、警告対象としてファイル出力を行う。
			for(Map.Entry<String, Boolean> m : riyuCdMap.entrySet()) {
				if(m.getValue()) {
					// 警告が一件でも存在すれば出力フラグを立てる
					outFlg = true;
				}
			}
			
			if (outFlg) {
				JBSbatServiceInterfaceMap outPutData = map037(rec);
				outputInItem.addOutMapList(outPutData);
				//clearAllRiyuCdMap();
			}
		}
		
		// 現在の請求契約番号を処理済みにとして未納情報請求契約番号Mapから削除する。
		tranSkyKeiMap.remove(skyKeiNo);
		mastWk.remove(skyKeiNo);
		tranWk.remove(skyKeiNo);
	return outputInItem;
	}
	
	/**
	 * マスタに請求契約番号が存在しない為未出力となった未納情報を出力します
	 * @param outputInItem
	 * @return
	 * @throws Exception
	 */
	private JBSbatOutputItem createOutputInItemMinou(JBSbatOutputItem outputInItem) throws Exception {
		// 請求契約番号
		String skyKeiNo = "";
		// 請求契約番号毎のトランリスト
		List<JBSbatServiceInterfaceMap> list = null;
		
		// 請求契約番号毎の合算請求抑止有無
		String umu = "";
		// 督促ステータス
		String stat = "";
		// 督促移動年月日
		String idoYmd = "";
		// 検証対象年月
		StringBuffer opeYmd = null;
		
		for(Entry<String, List<JBSbatServiceInterfaceMap>> target : tranWk.entrySet()) {
			// 請求契約番号を取得します。
			skyKeiNo = target.getKey();
			list = target.getValue();
			for (JBSbatServiceInterfaceMap bean : list) {
				// チェック３
				// 請求契約番号毎の合算請求抑止有無(NULLの場合「なし」)
				umu = bean.getString(JBSbatAKIFM038.SEIKY_YOKSI_CD);
				// 督促ステータス
				stat = bean.getString(JBSbatAKIFM038.TOKUSOKU_STAT);
				// 督促異動年月日
				idoYmd = bean.getString(JBSbatAKIFM038.TOKUSOKU_IDO_YMD);
				// 検証対象年月
				opeYmd = new StringBuffer(bean.getString(JBSbatAKIFM038.KNSHOTGT_YM));
				opeYmd.append("08");
				
				if(!umu.isEmpty()) {
					// エラー対象外 合算抑止有無　あり
					continue;
				} else if (STAT_60.equals(stat) || STAT_61.equals(stat) || STAT_90.equals(stat) || STAT_99.equals(stat) ) {
					// エラー対象外
					continue;
				} else if (STAT_62.equals(stat) && opeYmd.toString().compareTo(idoYmd) >= 0) {
					// 督促ステータス = 小額債権 かつ 督促異動年月日　≦　検証対象年月の８日
					// エラー対象外
					continue;
				}
				// 警告出力
				JBSbatServiceInterfaceMap outPutData = map038(bean,false,true);
				outputInItem.addOutMapList(outPutData);
			}
		}
		return outputInItem;
	}
	/**
	 * DB相関チェック対象情報編集データを元にマッピングを行います。
	 * @param map
	 * @return
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap map037(JBSbatServiceInterfaceMap map) throws Exception {
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// 理由コードの設定
		if(riyuCdMap.get(RIYU_CD_01)) {
			outMap.set(JBSbatAKIFM039.OUTPUT_REASON_CD1 , RIYU_CD_01);
			outMap.set(JBSbatAKIFM039.OUTPUT_REASON1 , RIYU_01);
		}
		if(riyuCdMap.get(RIYU_CD_02)) {
			outMap.set(JBSbatAKIFM039.OUTPUT_REASON_CD2 , RIYU_CD_02);
			outMap.set(JBSbatAKIFM039.OUTPUT_REASON2 , RIYU_02);
		}
		if(riyuCdMap.get(RIYU_CD_03)) {
			outMap.set(JBSbatAKIFM039.OUTPUT_REASON_CD3 , RIYU_CD_03);
			outMap.set(JBSbatAKIFM039.OUTPUT_REASON3 , RIYU_03);
		}
		if(riyuCdMap.get(RIYU_CD_04)) {
			outMap.set(JBSbatAKIFM039.OUTPUT_REASON_CD4 , RIYU_CD_04);
			outMap.set(JBSbatAKIFM039.OUTPUT_REASON4 , RIYU_04);
		}
		
		outMap.set(JBSbatAKIFM039.SEIKY_NO , map.getString(JBSbatAKIFM037.SEIKY_NO ));
		outMap.set(JBSbatAKIFM039.SEIKY_NO , map.getString(JBSbatAKIFM037.SEIKY_NO ));
		outMap.set(JBSbatAKIFM039.SEIKY_STAT , map.getString(JBSbatAKIFM037.SEIKY_STAT ));
		outMap.set(JBSbatAKIFM039.SEIKY_KEI_NO , map.getString(JBSbatAKIFM037.SEIKY_KEI_NO ));
		outMap.set(JBSbatAKIFM039.SEIKY_YM , map.getString(JBSbatAKIFM037.SEIKY_YM ));
		outMap.set(JBSbatAKIFM039.SEIKY_SBT_CD , map.getString(JBSbatAKIFM037.SEIKY_SBT_CD ));
		outMap.set(JBSbatAKIFM039.KEI_SEIKY_WAY_CD , map.getString(JBSbatAKIFM037.KEI_SEIKY_WAY_CD ));
		outMap.set(JBSbatAKIFM039.PRC_GRP_CD , map.getString(JBSbatAKIFM037.PRC_GRP_CD ));
		outMap.set(JBSbatAKIFM039.PCRS_CD , map.getString(JBSbatAKIFM037.PCRS_CD ));
		outMap.set(JBSbatAKIFM039.PRC_SVC_CD , map.getString(JBSbatAKIFM037.PRC_SVC_CD ));
		outMap.set(JBSbatAKIFM039.PRC_KMK_CD , map.getString(JBSbatAKIFM037.PRC_KMK_CD ));
		outMap.set(JBSbatAKIFM039.AMNT , map.getString(JBSbatAKIFM037.AMNT ));
		outMap.set(JBSbatAKIFM039.PRC_TEISE_ADD_FLG , map.getString(JBSbatAKIFM037.PRC_TEISE_ADD_FLG ));
		outMap.set(JBSbatAKIFM039.SAIKEN_NO , map.getString(JBSbatAKIFM037.SAIKEN_NO ));
		outMap.set(JBSbatAKIFM039.SAIKEN_YM , map.getString(JBSbatAKIFM037.SAIKEN_YM ));
		outMap.set(JBSbatAKIFM039.SAIKEN_STAT , map.getString(JBSbatAKIFM037.SAIKEN_STAT ));
		outMap.set(JBSbatAKIFM039.SEIKYU_PRC_GRP_CD , map.getString(JBSbatAKIFM037.SEIKYU_PRC_GRP_CD ));
		outMap.set(JBSbatAKIFM039.SEIKYU_PCRS_CD , map.getString(JBSbatAKIFM037.SEIKYU_PCRS_CD ));
		outMap.set(JBSbatAKIFM039.SEIKYU_PRC_SVC_CD , map.getString(JBSbatAKIFM037.SEIKYU_PRC_SVC_CD ));
		outMap.set(JBSbatAKIFM039.SEIKYU_PRC_KMK_CD , map.getString(JBSbatAKIFM037.SEIKYU_PRC_KMK_CD ));
		outMap.set(JBSbatAKIFM039.SEIKYU_AMNT , map.getString(JBSbatAKIFM037.SEIKYU_AMNT ));
		outMap.set(JBSbatAKIFM039.MISHU_PRC_GRP_CD , map.getString(JBSbatAKIFM037.MISHU_PRC_GRP_CD ));
		outMap.set(JBSbatAKIFM039.MISHU_PCRS_CD , map.getString(JBSbatAKIFM037.MISHU_PCRS_CD ));
		outMap.set(JBSbatAKIFM039.MISHU_PRC_SVC_CD , map.getString(JBSbatAKIFM037.MISHU_PRC_SVC_CD ));
		outMap.set(JBSbatAKIFM039.MISHU_PRC_KMK_CD , map.getString(JBSbatAKIFM037.MISHU_PRC_KMK_CD ));
		outMap.set(JBSbatAKIFM039.MISHU_AMNT , map.getString(JBSbatAKIFM037.MISHU_AMNT ));
		outMap.set(JBSbatAKIFM039.TOKUSOKU_NO , map.getString(JBSbatAKIFM037.TOKUSOKU_NO ));
		outMap.set(JBSbatAKIFM039.TOKUSOKU_STAT , map.getString(JBSbatAKIFM037.TOKUSOKU_STAT ));
		outMap.set(JBSbatAKIFM039.TOKUSOKU_AMNT , map.getString(JBSbatAKIFM037.TOKUSOKU_AMNT ));
		outMap.set(JBSbatAKIFM039.TOKUSOKU_STAYMD , map.getString(JBSbatAKIFM037.TOKUSOKU_STAYMD ));
		outMap.set(JBSbatAKIFM039.TOKUSOKU_ENDYMD , map.getString(JBSbatAKIFM037.TOKUSOKU_ENDYMD ));
		outMap.set(JBSbatAKIFM039.TOKUSOKU_IDO_YMD , map.getString(JBSbatAKIFM037.TOKUSOKU_IDO_YMD ));
		outMap.set(JBSbatAKIFM039.SEIKYSHO_SEIKY_YOKSI_CD , map.getString(JBSbatAKIFM037.SEIKYSHO_SEIKY_YOKSI_CD ));
		outMap.set(JBSbatAKIFM039.SEIKYSHO_SEIKY_YOKSI_FLG , map.getString(JBSbatAKIFM037.SEIKYSHO_SEIKY_YOKSI_FLG ));
		outMap.set(JBSbatAKIFM039.SEIKYSHO_SEIKY_YOKSI_YMD , map.getString(JBSbatAKIFM037.SEIKYSHO_SEIKY_YOKSI_YMD ));
		outMap.set(JBSbatAKIFM039.SEIKYSHO_UTWK_SEIKY_YOKSI_CD , map.getString(JBSbatAKIFM037.SEIKYSHO_UTWK_SEIKY_YOKSI_CD ));
		outMap.set(JBSbatAKIFM039.SEIKYSHO_UTWK_SEIKY_YOKSI_FLG , map.getString(JBSbatAKIFM037.SEIKYSHO_UTWK_SEIKY_YOKSI_FLG ));
		outMap.set(JBSbatAKIFM039.SEIKYSHO_UTWK_SEIKY_YOKSI_YMD , map.getString(JBSbatAKIFM037.SEIKYSHO_UTWK_SEIKY_YOKSI_YMD ));
		outMap.set(JBSbatAKIFM039.GSN_SEIKY_YOKSI_CD , map.getString(JBSbatAKIFM037.GSN_SEIKY_YOKSI_CD ));
		outMap.set(JBSbatAKIFM039.GSN_SEIKY_YOKSI_FLG , map.getString(JBSbatAKIFM037.GSN_SEIKY_YOKSI_FLG ));
		outMap.set(JBSbatAKIFM039.GSN_SEIKY_YOKSI_YMD , map.getString(JBSbatAKIFM037.GSN_SEIKY_YOKSI_YMD ));
		outMap.set(JBSbatAKIFM039.KSI_MDGT_SEIKY_YOKSI_CD , map.getString(JBSbatAKIFM037.KSI_MDGT_SEIKY_YOKSI_CD ));
		outMap.set(JBSbatAKIFM039.KSI_MDGT_SEIKY_YOKSI_FLG , map.getString(JBSbatAKIFM037.KSI_MDGT_SEIKY_YOKSI_FLG ));
		outMap.set(JBSbatAKIFM039.KSI_MDGT_SEIKY_YOKSI_YMD , map.getString(JBSbatAKIFM037.KSI_MDGT_SEIKY_YOKSI_YMD ));
		outMap.set(JBSbatAKIFM039.GENE_ADD_DTM , map.getString(JBSbatAKIFM037.GENE_ADD_DTM ));
		outMap.set(JBSbatAKIFM039.SEIKY_KEI_STAT , map.getString(JBSbatAKIFM037.SEIKY_KEI_STAT ));
		outMap.set(JBSbatAKIFM039.SYSID , map.getString(JBSbatAKIFM037.SYSID ));
		outMap.set(JBSbatAKIFM039.MANSION_OWNR_ID , map.getString(JBSbatAKIFM037.MANSION_OWNR_ID ));
		outMap.set(JBSbatAKIFM039.SEIKY_WAY_CD , map.getString(JBSbatAKIFM037.SEIKY_WAY_CD ));
		outMap.set(JBSbatAKIFM039.SEIKY_WAY_CHGE_YMD , map.getString(JBSbatAKIFM037.SEIKY_WAY_CHGE_YMD ));
		outMap.set(JBSbatAKIFM039.SEIKY_WAY_NO_KOZA , map.getString(JBSbatAKIFM037.SEIKY_WAY_NO_KOZA ));
		outMap.set(JBSbatAKIFM039.SEIKY_WAY_NO_CRECARD , map.getString(JBSbatAKIFM037.SEIKY_WAY_NO_CRECARD ));
		outMap.set(JBSbatAKIFM039.SEIKY_WAY_APLY_ADJ_YMD , map.getString(JBSbatAKIFM037.SEIKY_WAY_APLY_ADJ_YMD ));
		outMap.set(JBSbatAKIFM039.SEIKYUS_HAKKO_YH , map.getString(JBSbatAKIFM037.SEIKYUS_HAKKO_YH ));
		outMap.set(JBSbatAKIFM039.KOZA_GENE_ADD_DTM , map.getString(JBSbatAKIFM037.KOZA_GENE_ADD_DTM ));
		outMap.set(JBSbatAKIFM039.KOZA_STAT , map.getString(JBSbatAKIFM037.KOZA_STAT ));
		outMap.set(JBSbatAKIFM039.BANK_CD , map.getString(JBSbatAKIFM037.BANK_CD ));
		outMap.set(JBSbatAKIFM039.BANK_SHITEN_CD , map.getString(JBSbatAKIFM037.BANK_SHITEN_CD ));
		outMap.set(JBSbatAKIFM039.KHRI_TTDK_CNCL_YMD , map.getString(JBSbatAKIFM037.KHRI_TTDK_CNCL_YMD ));
		outMap.set(JBSbatAKIFM039.KSHBI_SKEKKA_CD , map.getString(JBSbatAKIFM037.KSHBI_SKEKKA_CD ));
		outMap.set(JBSbatAKIFM039.PAY_JUDGE_REQYMD , map.getString(JBSbatAKIFM037.PAY_JUDGE_REQYMD ));
		outMap.set(JBSbatAKIFM039.PAY_JUDGE_REQ_CL_YMD , map.getString(JBSbatAKIFM037.PAY_JUDGE_REQ_CL_YMD ));
		outMap.set(JBSbatAKIFM039.PAY_SKEKKA_CD , map.getString(JBSbatAKIFM037.PAY_SKEKKA_CD ));
		outMap.set(JBSbatAKIFM039.OUT_KHRI_JUDGE_FIN_YMD , map.getString(JBSbatAKIFM037.OUT_KHRI_JUDGE_FIN_YMD ));
		outMap.set(JBSbatAKIFM039.CRECARD_YK_CFM_YMD , map.getString(JBSbatAKIFM037.CRECARD_YK_CFM_YMD ));
		outMap.set(JBSbatAKIFM039.CRECARD_GENE_ADD_DTM , map.getString(JBSbatAKIFM037.CRECARD_GENE_ADD_DTM ));
		outMap.set(JBSbatAKIFM039.CRECARD_STAT , map.getString(JBSbatAKIFM037.CRECARD_STAT ));
		outMap.set(JBSbatAKIFM039.CRECARD_COMP_CD , map.getString(JBSbatAKIFM037.CRECARD_COMP_CD ));
		outMap.set(JBSbatAKIFM039.CRECARD_YK_KIGEN , map.getString(JBSbatAKIFM037.CRECARD_YK_KIGEN ));
		outMap.set(JBSbatAKIFM039.CRECARD_KSHBI_SKEKKA_CD , map.getString(JBSbatAKIFM037.CRECARD_KSHBI_SKEKKA_CD ));
		outMap.set(JBSbatAKIFM039.CRECARD_PAY_SKEKKA_CD , map.getString(JBSbatAKIFM037.CRECARD_PAY_SKEKKA_CD ));
		outMap.set(JBSbatAKIFM039.AUTHORI_CFM_DTM , map.getString(JBSbatAKIFM037.AUTHORI_CFM_DTM ));
		outMap.set(JBSbatAKIFM039.YK_YOKYU_YMD , map.getString(JBSbatAKIFM037.YK_YOKYU_YMD ));
		outMap.set(JBSbatAKIFM039.YK_CFM_RSLT_DIV , map.getString(JBSbatAKIFM037.YK_CFM_RSLT_DIV ));
		outMap.set(JBSbatAKIFM039.YK_CFM_YMD , map.getString(JBSbatAKIFM037.YK_CFM_YMD ));
		outMap.set(JBSbatAKIFM039.RE_AUTHORI_CFM_DTM , map.getString(JBSbatAKIFM037.RE_AUTHORI_CFM_DTM ));
		outMap.set(JBSbatAKIFM039.RE_AUTHORI_RSLT_CD , map.getString(JBSbatAKIFM037.RE_AUTHORI_RSLT_CD ));
		outMap.set(JBSbatAKIFM039.CRECA_MK_YM , map.getString(JBSbatAKIFM037.CRECA_MK_YM ));
		outMap.set(JBSbatAKIFM039.CREDIT_AUTH_JSK_NO , map.getString(JBSbatAKIFM037.CREDIT_AUTH_JSK_NO ));
		outMap.set(JBSbatAKIFM039.CREDIT_AUTH_GENE_ADD_DTM , map.getString(JBSbatAKIFM037.CREDIT_AUTH_GENE_ADD_DTM ));
		outMap.set(JBSbatAKIFM039.AUTH_TRAN_CD , map.getString(JBSbatAKIFM037.AUTH_TRAN_CD ));
		outMap.set(JBSbatAKIFM039.SALES_AUTHORI_AMNT , map.getString(JBSbatAKIFM037.SALES_AUTHORI_AMNT ));
		outMap.set(JBSbatAKIFM039.AUTH_FLG , map.getString(JBSbatAKIFM037.AUTH_FLG ));
		outMap.set(JBSbatAKIFM039.AUTH_SKEKKA_CD , map.getString(JBSbatAKIFM037.AUTH_SKEKKA_CD ));
		outMap.set(JBSbatAKIFM039.AUTHORI_YOKYU_CD , map.getString(JBSbatAKIFM037.AUTHORI_YOKYU_CD ));
		outMap.set(JBSbatAKIFM039.OP_SVC_KEI_NO , map.getString(JBSbatAKIFM037.OP_SVC_KEI_NO ));
		outMap.set(JBSbatAKIFM039.OP_SVC_GENE_ADD_DTM , map.getString(JBSbatAKIFM037.OP_SVC_GENE_ADD_DTM ));
		outMap.set(JBSbatAKIFM039.OP_SVC_KEI_STAT , map.getString(JBSbatAKIFM037.OP_SVC_KEI_STAT ));
		outMap.set(JBSbatAKIFM039.OP_SVC_CD , map.getString(JBSbatAKIFM037.OP_SVC_CD ));
		outMap.set(JBSbatAKIFM039.OP_SVC_PCRS_CD , map.getString(JBSbatAKIFM037.OP_SVC_PCRS_CD ));
		outMap.set(JBSbatAKIFM039.PPLAN_CD , map.getString(JBSbatAKIFM037.PPLAN_CD ));
		outMap.set(JBSbatAKIFM039.SVC_KEI_NO , map.getString(JBSbatAKIFM037.SVC_KEI_NO ));
		outMap.set(JBSbatAKIFM039.PLAN_STAYMD , map.getString(JBSbatAKIFM037.PLAN_STAYMD ));
		outMap.set(JBSbatAKIFM039.PLAN_ENDYMD , map.getString(JBSbatAKIFM037.PLAN_ENDYMD ));
		outMap.set(JBSbatAKIFM039.PLAN_CHRG_STAYMD , map.getString(JBSbatAKIFM037.PLAN_CHRG_STAYMD ));
		outMap.set(JBSbatAKIFM039.PLAN_CHRG_ENDYMD , map.getString(JBSbatAKIFM037.PLAN_CHRG_ENDYMD ));
		outMap.set(JBSbatAKIFM039.SVC_STAYMD , map.getString(JBSbatAKIFM037.SVC_STAYMD ));
		outMap.set(JBSbatAKIFM039.SVC_CHRG_STAYMD , map.getString(JBSbatAKIFM037.SVC_CHRG_STAYMD ));
		outMap.set(JBSbatAKIFM039.SVC_STP_YMD , map.getString(JBSbatAKIFM037.SVC_STP_YMD ));
		outMap.set(JBSbatAKIFM039.SVC_STP_RLS_YMD , map.getString(JBSbatAKIFM037.SVC_STP_RLS_YMD ));
		outMap.set(JBSbatAKIFM039.SVC_ENDYMD , map.getString(JBSbatAKIFM037.SVC_ENDYMD ));
		outMap.set(JBSbatAKIFM039.SVC_CHRG_ENDYMD , map.getString(JBSbatAKIFM037.SVC_CHRG_ENDYMD ));
		outMap.set(JBSbatAKIFM039.SVC_DSL_YMD , map.getString(JBSbatAKIFM037.SVC_DSL_YMD ));
		outMap.set(JBSbatAKIFM039.KAIHK_YMD , map.getString(JBSbatAKIFM037.KAIHK_YMD ));
		outMap.set(JBSbatAKIFM039.FLORLMT_ORVER , map.getString(JBSbatAKIFM037.FLORLMT_ORVER ));
		outMap.set(JBSbatAKIFM039.SEIKY_WAY_CD_YOSO, map.getString(JBSbatAKIFM037.SEIKY_WAY_CD_YOSO ));
		outMap.setOutFlg(true);
		return outMap;
	}
	
	/**
	 * 未納情報編集データを元にマッピングを行います。
	 * @param map
	 * @return
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap map038(JBSbatServiceInterfaceMap map, boolean cd05, boolean cd06) throws Exception {
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		if(cd05) {
			outMap.set(JBSbatAKIFM039.OUTPUT_REASON_CD5 , RIYU_CD_05);
			outMap.set(JBSbatAKIFM039.OUTPUT_REASON5 , RIYU_05);
		}
		
		if (cd06) {
			outMap.set(JBSbatAKIFM039.OUTPUT_REASON_CD6 , RIYU_CD_06);
			outMap.set(JBSbatAKIFM039.OUTPUT_REASON6 , RIYU_06);
		}
		outMap.set(JBSbatAKIFM039.SEIKY_KEI_NO , map.getString(JBSbatAKIFM038.SEIKY_KEI_NO ));
		outMap.set(JBSbatAKIFM039.SAIKEN_NO , map.getString(JBSbatAKIFM038.SAIKEN_NO ));
		outMap.set(JBSbatAKIFM039.SAIKEN_YM , map.getString(JBSbatAKIFM038.SAIKEN_YM ));
		outMap.set(JBSbatAKIFM039.SAIKEN_STAT , map.getString(JBSbatAKIFM038.SAIKEN_STAT ));
		outMap.set(JBSbatAKIFM039.TOKUSOKU_NO , map.getString(JBSbatAKIFM038.TOKUSOKU_NO ));
		outMap.set(JBSbatAKIFM039.TOKUSOKU_STAT , map.getString(JBSbatAKIFM038.TOKUSOKU_STAT ));
		outMap.set(JBSbatAKIFM039.TOKUSOKU_AMNT , map.getString(JBSbatAKIFM038.TOKUSOKU_AMNT ));
		outMap.set(JBSbatAKIFM039.TOKUSOKU_STAYMD , map.getString(JBSbatAKIFM038.TOKUSOKU_STAYMD ));
		outMap.set(JBSbatAKIFM039.TOKUSOKU_ENDYMD , map.getString(JBSbatAKIFM038.TOKUSOKU_ENDYMD ));
		outMap.set(JBSbatAKIFM039.TOKUSOKU_IDO_YMD , map.getString(JBSbatAKIFM038.TOKUSOKU_IDO_YMD ));
		outMap.setOutFlg(true);
		return outMap;
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * @return mastProcFlg を戻します。
	 */
	public boolean isMastProcFlg()
	{
		return mastProcFlg;
	}

	/**
	 * @return matchProcFlg を戻します。
	 */
	public boolean isMatchProcFlg()
	{
		return matchProcFlg;
	}

	/**
	 * @return tranProcFlg を戻します。
	 */
	public boolean isTranProcFlg()
	{
		return tranProcFlg;
	}

	/**
	 * @param mast_ProcFlg 設定する mastProcFlg。
	 */
	public void setMastProcFlg(boolean mast_ProcFlg)
	{
		this.mastProcFlg = mast_ProcFlg;
	}

	/**
	 * @param match_ProcFlg 設定する matchProcFlg。
	 */
	public void setMatchProcFlg(boolean match_ProcFlg)
	{
		this.matchProcFlg = match_ProcFlg;
	}

	/**
	 * @param tran_ProcFlg 設定する tranProcFlg。
	 */
	public void setTranProcFlg(boolean tran_ProcFlg)
	{
		this.tranProcFlg = tran_ProcFlg;
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
