/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHJtmtPrcIktChgeSjFileSksi
*	ソースファイル名	：JBSbatCHJtmtPrcIktChgeSjFileSksi.java
*	作成者				：富士通　
*	作成日				：2020年04月20日
*＜機能概要＞
*　譲渡元料金一括変更指示ファイル作成部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v49.00.00	2020/04/20	 FJ)塩津	【ANK-3826-00-00】譲渡未収分の載せ替え処理の自動化
*	v49.00.00	2020/07/03	 FJ)塩津	【IT2-2020-0000011】譲渡元の料金一括変更ができない
*	v50.00.00	2020/08/17	 FJ)塩津	【ANK-3912-00-00】譲渡未収載せ替え対象の条件見直し
*	v68.00.00	2023/10/28	 FJ)三原	【IT2-2023-0000016】譲渡未収料金載せ替え登録処理で工事費割賦分割料金の料金項目コードが正しく変換できていない
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import java.math.BigDecimal;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCHbatSeikyKaknoBusinessUtil;
import eo.business.util.file.JBSbatCHIFM352;
import eo.business.util.file.JBSbatCHIFM353;
import eo.business.util.table.JBSbatCH_M_PRC_KMK_CS_CHGE;
// v49.00 2020/07/03 IT2-2020-0000011 add start
import eo.business.util.table.JBSbatKK_T_KKTK_SVC_KEI;
// v49.00 2020/07/03 IT2-2020-0000011 add end
import eo.common.util.JPCEditString;
import eo.common.constant.JACStrConst;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;


/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatCHJtmtPrcIktChgeSjFileSksi extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** テーブル(料金項目抽出変換)*/
	private static final String D_TBL_NAME_CH_M_PRC_KMK_CS_CHGE = "CH_M_PRC_KMK_CS_CHGE";
	
	// v50.00.00 2020/08/17 ANK-3912-00-00 add start
	/** テーブル(請求内訳)*/
	private static final String D_TBL_NAME_CH_T_SEIKY_UCWK = "CH_T_SEIKY_UCWK";
	// v50.00.00 2020/08/17 ANK-3912-00-00 add end
	
	/** SQL定義キー(CH_SELECT_021)*/
	private static final String CH_M_PRC_KMK_CS_CHGE_CH_SELECT_021 = "CH_SELECT_021";
	
	// v50.00.00 2020/08/17 ANK-3912-00-00 add start
	/** SQL定義キー(CH_SELECT_025)*/
	private static final String CH_T_SEIKY_UCWK_CH_SELECT_025 = "CH_SELECT_025";
	// v50.00.00 2020/08/17 ANK-3912-00-00 add end
	
	// v49.00 2020/07/03 IT2-2020-0000011 add start
	/** テーブル(機器提供サービス契約)*/
	private static final String D_TBL_NAME_KK_T_KKTK_SVC_KEI = "KK_T_KKTK_SVC_KEI";
	
	/** SQL定義キー(CH_SELECT_004)*/
	private static final String KK_T_KKTK_SVC_KEI_CH_SELECT_004 = "CH_SELECT_004";
	// v49.00 2020/07/03 IT2-2020-0000011 add end
	
	/** テーブルアクセスクラス(料金項目抽出変換)*/
	private JBSbatSQLAccess db_CH_M_PRC_KMK_CS_CHGE = null;
	
	// v50.00.00 2020/08/17 ANK-3912-00-00 add start
	/** テーブルアクセスクラス(請求内訳)*/
	private JBSbatSQLAccess db_CH_T_SEIKY_UCWK = null;
	// v50.00.00 2020/08/17 ANK-3912-00-00 add end
	
	// v49.00 2020/07/03 IT2-2020-0000011 add start
	/** テーブルアクセスクラス(機器提供サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KKTK_SVC_KEI = null;
	// v49.00 2020/07/03 IT2-2020-0000011 add end

	/** 退避．ワーク処理グループ番号*/
	private int wkTrnGrpNo = 0;
	
	/** 退避．ワーク処理通番*/
	private int wkTrnSeq = 0;
	
	/** 編集用 桁数 */
	private static final int NO_LENGTH = 4;
	
	/** 退避．変更区分 */
	private String chgDiv = null;
	
	/** 退避．変更後金額 */
	private BigDecimal chgAfAmnt = BigDecimal.ZERO;
	
	/** 退避．料金項目コード */
	private String prcKmkCd = null;
		
	/** 工事費割賦分割料金情報（ネット） */
	private String kjHiKpBktPrcInfNet = null;

	/** 工事費割賦分割料金情報（電話） */
	private String kjHiKpBktPrcInfTel = null;
	
	/** 工事費割賦分割料金項目マップ */
	private HashMap<String, String> kjHiBktPrcKmkMap = new HashMap<String, String>();
	
	/** 退避．未納請求月 */
	private String minouSeikyMonths = null;
	
	/** 退避．請求契約番号（譲渡先） */
	private String seikyKeiNoSks = null;

	/** 退避．記事 */
	private String kiji = null;
	
	/** キー：インマップ*/
	private static final String KEY_IN_MAP = "IN_MAP";
	
	// v50.00.00 2020/08/17 ANK-3912-00-00 mod start
	/** 頭文字*/
	//private static final String HEAD_TEXT = "　・";
	/** 頭文字*/
	private static final String HEAD_TEXT = "・";
	// v50.00.00 2020/08/17 ANK-3912-00-00 mod end
	
	/** "0" */
	private static final String ZERO_DEL = "0";

	/** キー：処理グループ番号*/
	private String keyTrnGrpNo = null;

	/** 未納請求月リスト*/
	List<String> minouSeikyMonthList = new ArrayList<String>();

	/** 請求契約番号（譲渡先）リスト*/
	List<String> seikyKeiNoSkList = new ArrayList<String>();

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		// DBアクセスクラスを生成します
		db_CH_M_PRC_KMK_CS_CHGE = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_KMK_CS_CHGE);
		// v50.00.00 2020/08/17 ANK-3912-00-00 add start
		db_CH_T_SEIKY_UCWK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_SEIKY_UCWK);
		// v50.00.00 2020/08/17 ANK-3912-00-00 add end
		// v49.00 2020/07/03 IT2-2020-0000011 add start
		db_KK_T_KKTK_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KKTK_SVC_KEI);
		// v49.00 2020/07/03 IT2-2020-0000011 add end
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		// 工事費割賦分割料金情報（ネット）
		kjHiKpBktPrcInfNet = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_WKS_KJ_HI_NET);
		// 工事費割賦分割料金情報（電話）
		kjHiKpBktPrcInfTel = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_WKS_KJ_HI_TEL);
		
		// 工事費割賦分割料金の料金項目コードを取得
		kjHiBktPrcKmkMap = getKjHiKpBnktPrc(kjHiKpBktPrcInfNet, kjHiKpBktPrcInfTel);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		if (null == inMap)
		{
			// 退避リストが空でない場合
			if (outputInItem.isOutMapList()) 
			{
				// キーブレーク処理
				keyBreakProc(inMap, outputInItem);
			}
			return outputInItem;
		}
		
		// 退避リストが空の場合
		if (!outputInItem.isOutMapList()) 
		{
			//処理グループ番号の設定
			wkTrnGrpNo++;
			// キーブレーク判定用キー
			String keys1 = JBSbatCHIFM352.SEIKY_KEI_NO_MT;
			String keys2 = JBSbatCHIFM352.SEIKY_YM_MT;
			keyTrnGrpNo = inMap.getString(keys1).concat(inMap.getString(keys2));
			// データ追加処理
			addDataProc(inMap, outputInItem);
			return outputInItem;
		}
		else
		{
			// キーブレーク（請求契約番号（譲渡元））の場合
			if (isKeyBreak1(inMap, outputInItem))
			{
				// キーブレーク処理
				keyBreakProc(inMap, outputInItem);
				// データ追加処理
				addDataProc(inMap, outputInItem);
			}
			// キーブレーク（請求契約番号（譲渡元））でない場合
			else
			{
				if (isKeyBreak2(inMap))
				{
					//処理グループ番号の設定
					wkTrnGrpNo++;
					// キーブレーク判定用キー
					String keys1 = JBSbatCHIFM352.SEIKY_KEI_NO_MT;
					String keys2 = JBSbatCHIFM352.SEIKY_YM_MT;
					keyTrnGrpNo = inMap.getString(keys1).concat(inMap.getString(keys2));

					// ワーク処理通番を設定
					wkTrnSeq = 0;
				}
				// v50.00.00 2020/08/17 ANK-3912-00-00 mod start
				// 工事費割賦分割料金の料金項目コードの調整項目である場合、対する工事費割賦分割料金の料金項目コードが存在すれば出力しない
				String prcKmkCdAdj = replacePrcKmkChng(inMap.getString(JBSbatCHIFM352.PRC_KMK_CD_MT), "6");
				if("9".equals(inMap.getString(JBSbatCHIFM352.PRC_KMK_CD_MT).substring(8, 9)) && checkKjHiBktPrcKmkCd2(prcKmkCdAdj))
				{
					if(checkKjHiBktPrcKmkAdj(inMap, prcKmkCdAdj))
					{
						return outputInItem;
					}
				}
				// v50.00.00 2020/08/17 ANK-3912-00-00 mod end
				// データ追加処理
				addDataProc(inMap, outputInItem);
			}
			return outputInItem;
		}
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		db_CH_M_PRC_KMK_CS_CHGE.close();
		// v50.00.00 2020/08/17 ANK-3912-00-00 add start
		db_CH_T_SEIKY_UCWK.close();
		// v50.00.00 2020/08/17 ANK-3912-00-00 add end
		// v49.00 2020/07/03 IT2-2020-0000011 add start
		db_KK_T_KKTK_SVC_KEI.close();
		// v49.00 2020/07/03 IT2-2020-0000011 add end
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(CH_SELECT_021)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	システムコード
	 *		 	業務機能識別コード
	 *		 	業務機能識別コード
	 *		 	抽出変換コード
	 *		 	適用開始年月日
	 *		 	適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_M_PRC_KMK_CS_CHGE_CH_SELECT_021(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());

		// DBアクセスを実行します
		db_CH_M_PRC_KMK_CS_CHGE.selectBySqlDefine(paramList, CH_M_PRC_KMK_CS_CHGE_CH_SELECT_021);
	}

	/**
	 * 料金項目抽出変換情報の取得を行いMAPに設定します。
	 * 
	 * @param workKinoSkbtCdNet		工事費割賦分割料金情報（ネット）
	 * @param workKinoSkbtCdTel		工事費割賦分割料金情報（電話）
	 * @return HashMap<String, String> 		退避用マップ
	 * @throws Exception 	業務サービス内で発生した例外全般
	 */
	private HashMap<String, String> getKjHiKpBnktPrc(String workKinoSkbtCdNet, String workKinoSkbtCdTel) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getKjHiKpBnktPrc]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getKjHiKpBnktPrc][workKinoSkbtCd=" + workKinoSkbtCdNet + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getKjHiKpBnktPrc][workKinoSkbtCd=" + workKinoSkbtCdTel + "]");
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		paramList.setValue(workKinoSkbtCdNet);				// 業務機能識別コード
		paramList.setValue(workKinoSkbtCdTel);				// 業務機能識別コード
		paramList.setValue(super.systemCode);				// システムコード
		paramList.setValue(JACStrConst.CHSHT_CHG_CD_CST);	// 抽出変換コード
		paramList.setValue(super.opeDate);					// 料金項目抽出変換適用開始年月日
		paramList.setValue(super.opeDate);					// 料金項目抽出変換適用終了年月日
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getKjHiKpBnktPrc][paramList=" + paramList.getList().toString() + "]");
		
		// SQL実行
		executeCH_M_PRC_KMK_CS_CHGE_CH_SELECT_021(paramList.getList().toArray());
		JBSbatCommonDBInterface dbMap = db_CH_M_PRC_KMK_CS_CHGE.selectNext(); 
		
		HashMap<String, String> rtnMap = new HashMap<String, String>();

		while(dbMap != null)
		{
			// v50.00.00 2020/08/17 ANK-3912-00-00 mod start
			// マップにデータを格納
			//rtnMap.put(dbMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_KMK_CD), dbMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_KMK_CD));
			rtnMap.put(dbMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_KMK_CD), replacePrcKmkChng(dbMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_KMK_CD), "9"));
			// v50.00.00 2020/08/17 ANK-3912-00-00 mod end
			dbMap = db_CH_M_PRC_KMK_CS_CHGE.selectNext();
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getKjHiKpBnktPrc]");
		return rtnMap;
	}
	// v49.00 2020/07/03 IT2-2020-0000011 add start
	/**
	 * SQLKEY(CH_SELECT_004)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	システムコード
	 *		 	業務機能識別コード
	 *		 	業務機能識別コード
	 *		 	抽出変換コード
	 *		 	適用開始年月日
	 *		 	適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_KKTK_SVC_KEI_CH_SELECT_004(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_KKTK_SVC_KEI.selectBySqlDefine(paramList, KK_T_KKTK_SVC_KEI_CH_SELECT_004);
	}
	// v49.00 2020/07/03 IT2-2020-0000011 add end
	// v50.00.00 2020/08/17 ANK-3912-00-00 add start
	/**
	 * SQLKEY(CH_SELECT_025)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	システムコード
	 *		 	業務機能識別コード
	 *		 	業務機能識別コード
	 *		 	抽出変換コード
	 *		 	適用開始年月日
	 *		 	適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_T_SEIKY_UCWK_CH_SELECT_025(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());

		// DBアクセスを実行します
		db_CH_T_SEIKY_UCWK.selectBySqlDefine(paramList, CH_T_SEIKY_UCWK_CH_SELECT_025);
	}
	// v50.00.00 2020/08/17 ANK-3912-00-00 add end

	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	/**
	 * 出力用マップを取得します。
	 * 
	 * @param outputInItem 入力データリスト
	 * @param outputBean 出力リスト
	 * @return 出力用マップ
	 * @throws Exception キャストまたはDBアクセスで例外が発生した場合
	 */
	private JBSbatServiceInterfaceMap getOutMap(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputInItem) throws Exception
	{
		// 出力用マップ
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// 工事費割賦分割料金かどうかチェック
		if(checkKjHiBktPrcKmkCd(inMap))
		{
			// v50.00.00 2020/08/17 ANK-3912-00-00 mod start
			// 変更区分に"1"(追加)を設定する
//			chgDiv = JACStrConst.ADJ_DIV_ADD;
			// 譲渡元の未納請求月の請求内訳に工事費割賦分割料金調整が存在しているか
			String prcKmkCdAdj = replacePrcKmkChng(inMap.getString(JBSbatCHIFM352.PRC_KMK_CD_MT), "9");
			if(checkKjHiBktPrcKmkAdj(inMap, prcKmkCdAdj))
			{
				// 変更区分に"2"(変更)を設定する
				chgDiv = JACStrConst.ADD_DIV_UPD;
			}
			else
			{
				// 変更区分に"1"(追加)を設定する
				chgDiv = JACStrConst.ADJ_DIV_ADD;
			}
			// v50.00.00 2020/08/17 ANK-3912-00-00 mod end
			
			// IT2-2023-0000016 MOD START
			//// 料金項目コードの上9桁目を"9"に変換する
			//prcKmkCd = replacePrcKmkChng(inMap.getString(JBSbatCHIFM352.PRC_KMK_CD_MT), "9");
			// 入力（載替対象ファイル）の料金項目コード（譲渡元） 
			String inPrcKmkCdMt = inMap.getString(JBSbatCHIFM352.PRC_KMK_CD_MT);
			
			if (inPrcKmkCdMt != null && !"".equals(inPrcKmkCdMt))
			{
				// 工事費割賦分割料金の料金項目コードの上9桁目が"6"の場合
				if (inPrcKmkCdMt.substring(8, 9).equals("6"))
				{
					// 入力（載替対象ファイル）の料金項目コードの上9桁目を"9"に変換して設定する
					prcKmkCd = replacePrcKmkChng(inPrcKmkCdMt, "9");
				}
				// 工事費割賦分割料金の料金項目コードの上9桁目が"5"の場合
				else if(inPrcKmkCdMt.substring(8, 9).equals("5"))
				{
					// 入力（載替対象ファイル）の料金項目コードの上9桁目を"8"に変換して設定する
					prcKmkCd = replacePrcKmkChng(inPrcKmkCdMt, "8");
				}
			}
			// IT2-2023-0000016 MOD END
			
			// 変更後金額の符号を反転させる
			chgAfAmnt = new BigDecimal(inMap.getString(JBSbatCHIFM352.CHNG_AMNT)).negate();
		}
		else
		{
			// 変更区分に"3"(削除)を設定する
			chgDiv = JACStrConst.ADJ_DIV_DEL;
			
			// 料金項目コードを設定する
			prcKmkCd = inMap.getString(JBSbatCHIFM352.PRC_KMK_CD_MT);

			chgAfAmnt = BigDecimal.ZERO;
		}

		// v49.00 2020/07/03 IT2-2020-0000011 add start
		// 請求月(請求年月の下2桁を取得)
		outMap.set(JBSbatCHIFM353.SEIKY_MONTH, inMap.getString(JBSbatCHIFM352.SEIKY_YM_MT).substring(4, 6));
		// v49.00 2020/07/03 IT2-2020-0000011 add end
		// 処理グループ番号（ゼロパディング）
		outMap.set(JBSbatCHIFM353.TRN_GRP_NO, JPCEditString.fillZero(String.valueOf(wkTrnGrpNo), NO_LENGTH, false));
		// 処理通番（ゼロパディング）
		outMap.set(JBSbatCHIFM353.TRN_SEQ, JPCEditString.fillZero(String.valueOf(wkTrnSeq), NO_LENGTH, false));
		// 変更区分
		outMap.set(JBSbatCHIFM353.CHG_DIV, chgDiv);
		// 請求年月
		outMap.set(JBSbatCHIFM353.SEIKY_YM, inMap.getString(JBSbatCHIFM352.SEIKY_YM_MT));
		// 請求種別
		outMap.set(JBSbatCHIFM353.SEIKY_SBT_CD, inMap.getString(JBSbatCHIFM352.SEIKY_SBT_CD));
		// 請求契約番号
		outMap.set(JBSbatCHIFM353.SEIKY_KEI_NO, inMap.getString(JBSbatCHIFM352.SEIKY_KEI_NO_MT));
		// サービス契約番号
		outMap.set(JBSbatCHIFM353.SVC_KEI_NO, inMap.getString(JBSbatCHIFM352.SVC_KEI_NO));
		// マンションＩＤ
		outMap.set(JBSbatCHIFM353.MANS_ID, null);
		// 部屋番号
		outMap.set(JBSbatCHIFM353.RM_NO, null);
		// v49.00 2020/07/03 IT2-2020-0000011 mod start
		// サービス詳細識別番号
		//outMap.set(JBSbatCHIFM353.SVC_DTL_SKBT_NO, inMap.getString(JBSbatCHIFM352.SVC_DTL_SKBT_NO));
		if(inMap.getString(JBSbatCHIFM352.SVC_DTL_SKBT_NO).length() == 12)
		{
			// 機器提供サービス契約から機器製造番号を取得
			String kikiSeizoNo = getKikiSeizoNo(inMap.getString(JBSbatCHIFM352.SVC_DTL_SKBT_NO));
			
			if(null != kikiSeizoNo)
			{
				// サービス詳細識別番号に機器製造番号を設定
				outMap.set(JBSbatCHIFM353.SVC_DTL_SKBT_NO, kikiSeizoNo);
			}
			else
			{
				// サービス詳細識別番号
				outMap.set(JBSbatCHIFM353.SVC_DTL_SKBT_NO, inMap.getString(JBSbatCHIFM352.SVC_DTL_SKBT_NO));
			}
		}
		else
		{
			// サービス詳細識別番号
			outMap.set(JBSbatCHIFM353.SVC_DTL_SKBT_NO, inMap.getString(JBSbatCHIFM352.SVC_DTL_SKBT_NO));
		}
		// v49.00 2020/07/03 IT2-2020-0000011 mod end
		// 開始日
		outMap.set(JBSbatCHIFM353.USE_STAYMD, inMap.getString(JBSbatCHIFM352.USE_STAYMD));
		// 終了日
		outMap.set(JBSbatCHIFM353.USE_ENDYMD, inMap.getString(JBSbatCHIFM352.USE_ENDYMD));
		// 料金コースコード
		outMap.set(JBSbatCHIFM353.PCRS_CD, inMap.getString(JBSbatCHIFM352.PCRS_CD));
		// 料金サービスコード
		outMap.set(JBSbatCHIFM353.PRC_SVC_CD, inMap.getString(JBSbatCHIFM352.PRC_SVC_CD));
		// 料金項目コード
		outMap.set(JBSbatCHIFM353.PRC_KMK_CD, prcKmkCd);
		// 変更後金額
		outMap.set(JBSbatCHIFM353.CHG_AF_AMNT, chgAfAmnt);
		// 処理通番が1の場合、補償費扱いフラグ・顧客対応履歴表示フラグを設定
		if(wkTrnSeq == 1)
		{
			// 補償費扱いフラグ
			outMap.set(JBSbatCHIFM353.COMPENSATION_FLG, "0");
			// 顧客対応履歴表示フラグ
			outMap.set(JBSbatCHIFM353.CUST_TOAK_DSP_FLG, "0");
		}
		else
		{
			// 補償費扱いフラグ
			outMap.set(JBSbatCHIFM353.COMPENSATION_FLG, null);
			// 顧客対応履歴表示フラグ
			outMap.set(JBSbatCHIFM353.CUST_TOAK_DSP_FLG, null);
		}
		
		// 未納請求月、請求契約番号（譲渡先）の追加処理
		addMinouSeikyMonthProc(inMap);

		// インマップ
		outMap.set(KEY_IN_MAP, inMap);

		return outMap;
	}
	/**
	 * データ追加処理です。
	 * <br>
	 * @param inMap 入力電文
	 * @param outputInItem 出力情報ワーク
	 * @throws Exception キャストで例外が発生した場合
	 */
	private void addDataProc(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputInItem) throws Exception
	{
		// 処理通番の設定
		wkTrnSeq++;
		
		JBSbatServiceInterfaceMap outMap = getOutMap(inMap, outputInItem);
		
		if (outMap != null)
		{
			outputInItem.addOutMapList(outMap); 
		}
	}
	
	/**
	 * キーブレークかを取得します。
	 * <br>
	 * @param inMap 入力電文
	 * @param outputInItem 出力情報ワーク
	 * @return 判定結果
	 * @throws Exception キャストで例外が発生した場合
	 */
	private boolean isKeyBreak1(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputInItem) throws Exception
	{
		// キーブレーク判定用キー
		String keys = JBSbatCHIFM352.SEIKY_KEI_NO_MT;

		JBSbatServiceInterfaceMap tmpBean = (JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0);
		JBSbatServiceInterfaceMap preMap = (JBSbatServiceInterfaceMap)tmpBean.get(KEY_IN_MAP);

		// 前回の値
		String preValue = preMap.getString(keys);
		// 現在の値
		String curValue = inMap.getString(keys);
		// 値が変わっていればキーブレーク
		if (!preValue.equals(curValue))
		{
			return true;
		}

		return false;
	}
	
	/**
	 * キーブレーク（処理グループ番号）かを取得します。
	 * <br>
	 * @param inMap 入力電文
	 * @return 判定結果
	 * @throws Exception キャストで例外が発生した場合
	 */
	private boolean isKeyBreak2(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// キーブレーク判定用キー
		String keys1 = JBSbatCHIFM352.SEIKY_KEI_NO_MT;
		String keys2 = JBSbatCHIFM352.SEIKY_YM_MT;

		// 現在の値
		String key = inMap.getString(keys1).concat(inMap.getString(keys2));
		// 値が変わっていればキーブレーク
		if (!keyTrnGrpNo.equals(key))
		{
			return true;
		}

		return false;
	}
	/**
	 * キーブレーク処理です。
	 * <br>
	 * @param inMap 入力電文
	 * @param outputInItem 出力情報ワーク
	 * @throws Exception キャストで例外が発生した場合
	 */
	private void keyBreakProc(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputInItem) throws Exception
	{
		// ワークグループ番号を設定
		wkTrnGrpNo++;
		if (null != inMap)
		{
			// キーブレーク判定用キー
			String keys1 = JBSbatCHIFM352.SEIKY_KEI_NO_MT;
			String keys2 = JBSbatCHIFM352.SEIKY_YM_MT;
			keyTrnGrpNo = inMap.getString(keys1).concat(inMap.getString(keys2));
		}

		// ワーク処理通番を設定
		wkTrnSeq = 0;
		
		// 未納請求月、請求契約番号（譲渡先）を初期設定にする
		minouSeikyMonths = null;
		seikyKeiNoSks = null;
		minouSeikyMonthList = new ArrayList<String>();
		seikyKeiNoSkList = new ArrayList<String>();
		JBSbatServiceInterfaceMap tmpBean = new JBSbatServiceInterfaceMap();
		
		for(int i = 0; i < outputInItem.getOutMapList().size(); i++)
		{
			tmpBean = (JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(i);

			// 記事を設定
			if ("0001".equals(tmpBean.getString(JBSbatCHIFM353.TRN_SEQ)))
			{
				tmpBean.set(JBSbatCHIFM353.KIJI, kiji);
			}

			// 出力フラグを設定
			tmpBean.setOutFlg(true);
		}

	}
	/**
	 * 未納請求月、請求契約番号（譲渡先）追加処理です。
	 * <br>
	 * @param inMap 入力電文
	 * @throws Exception キャストで例外が発生した場合
	 */
	private void addMinouSeikyMonthProc(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// 未納請求月リストの追加
		String minouSeikyMonth = getSeikyMonth(inMap.getString(JBSbatCHIFM352.SEIKY_YM_MT).substring(4, 6));
		if (!minouSeikyMonthList.contains(minouSeikyMonth))
		{
			// 未納請求月の取得
			minouSeikyMonthList.add(minouSeikyMonth);
		}
		
		// 未納請求月の取得
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < minouSeikyMonthList.size(); i++)
		{
			if (i > 0)
			{
				sb.append(HEAD_TEXT);
			}
			sb.append(minouSeikyMonthList.get(i));
		}
		minouSeikyMonths = sb.toString();

		// 請求契約番号（譲渡先）リストの追加
		String seikyKeiNo = inMap.getString(JBSbatCHIFM352.SEIKY_KEI_NO_SK);
		if (!seikyKeiNoSkList.contains(seikyKeiNo))
		{
			seikyKeiNoSkList.add(seikyKeiNo);
		}
		
		// 請求契約番号（譲渡先）の取得
		sb = new StringBuffer();
		for (int i = 0; i < seikyKeiNoSkList.size(); i++)
		{
			if (i > 0)
			{
				sb.append(HEAD_TEXT);
			}
			sb.append(seikyKeiNoSkList.get(i));
		}
		seikyKeiNoSks = sb.toString();

		// 記事作成処理
		kiji = makeKiji(inMap, minouSeikyMonths, seikyKeiNoSks);
	}
	/**
	 * 請求月の取得
	 * @param  seikyYm 請求年月
	 * @return seikyMonth 請求月
	 * @throws Exception 例外が発生した場合
	 */
	private String getSeikyMonth(String seikyMonth) throws Exception
	{
		// 請求月の0削除
		if(seikyMonth.substring(0, 1).equals(ZERO_DEL))
		{
		    // 月の2桁目を出力
			seikyMonth = seikyMonth.substring(1, 2);
		}
		
		// 全角変換
		seikyMonth = JCHbatSeikyKaknoBusinessUtil.formatHanToZen(seikyMonth, JACStrConst.HAN_TO_ZEN_CHR);
		
		return seikyMonth;
	}
	/**
	 * 記事の取得
	 * @param  minouSeikyMonths 未納請求月リスト
	 * @param  seikyKeiNoSks 請求契約番号（譲渡先）リスト
	 * @return wkKiji 記事
	 * @throws Exception 例外が発生した場合
	 */
	private String makeKiji(JBSbatServiceInterfaceMap tmpBean, String minouSeikyMonths, String seikyKeiNoSks) throws Exception
	{
		//記事の設定
		String wkKiji = "譲渡先請求先番号" + seikyKeiNoSks + "へ" + minouSeikyMonths.toString()+ "月譲渡未納分載せ替え";
		
		return wkKiji;
	}

	/**
	 * 工事費割賦分割料金かどうかチェックします
	 * @param  inMap 入力電文
	 * @return 判定結果
	 * @throws Exception 例外が発生した場合
	 */
	private boolean checkKjHiBktPrcKmkCd(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// 料金項目コードの設定
		prcKmkCd = inMap.getString(JBSbatCHIFM352.PRC_KMK_CD_MT);
		
		// 料金訂正データファイル.料金項目コード（譲渡元）に工事費割賦分割料金が含まれている場合
		if(kjHiBktPrcKmkMap.containsKey(prcKmkCd))
			return true;
		else
			return false;
	}
	// v50.00.00 2020/08/17 ANK-3912-00-00 add start
	/**
	 * 工事費割賦分割料金かどうかチェックします
	 * @param  inMap 入力電文
	 * @return 判定結果
	 * @throws Exception 例外が発生した場合
	 */
	private boolean checkKjHiBktPrcKmkCd2(String prcKmkCd) throws Exception
	{
		
		// 料金訂正データファイル.料金項目コード（譲渡元）に工事費割賦分割料金が含まれている場合
		if(kjHiBktPrcKmkMap.containsKey(prcKmkCd))
			return true;
		else
			return false;
	}
	// v50.00.00 2020/08/17 ANK-3912-00-00 add end
	/**
	 * 料金項目コードの上9桁目を変換
	 * @param bfPrcKmkCd　変換前の料金項目コード
	 * @param value　変換する値
	 * @return afPrcKmkCd 　変換後の料金項目コード
	 * @throws Exception
	 */
	private String replacePrcKmkChng(String bfPrcKmkCd, String value) throws Exception
	{
		// 料金項目コードの上9桁目を値に変換した料金項目コードを設定
		String afPrcKmkCd = bfPrcKmkCd.substring(0, 8) + value + bfPrcKmkCd.substring(9, 11);
		
		return afPrcKmkCd;
	}
	// v49.00 2020/07/03 IT2-2020-0000011 add start
	/**
	 * 機器製造番号を取得
	 * @param kktkSvcKeiNo　機器提供サービス契約番号
	 * @return kikiSeizoNo 　機器製造番号
	 * @throws Exception
	 */
	private String getKikiSeizoNo(String kktkSvcKeiNo) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getKikiSeizoNo]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getKikiSeizoNo][workKinoSkbtCd=" + kktkSvcKeiNo + "]");
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		paramList.setValue(kktkSvcKeiNo);					// 機器提供サービス契約番号
		paramList.setValue(super.opeDate);					// 予約適用年月日
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getKikiSeizoNo][paramList=" + paramList.getList().toString() + "]");
		
		// SQL実行
		executeKK_T_KKTK_SVC_KEI_CH_SELECT_004(paramList.getList().toArray());
		
		// データを取得
		JBSbatCommonDBInterface dbMap = db_KK_T_KKTK_SVC_KEI.selectNext(); 
		
		// 取得したデータを機器製造番号に設定
		String kikiSeizoNo = dbMap.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SEIZO_NO);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getKikiSeizoNo]");
		return kikiSeizoNo;
	}
	// v49.00 2020/07/03 IT2-2020-0000011 add end
	// v50.00.00 2020/08/17 ANK-3912-00-00 add start
	/**
	 * 譲渡元の未納請求月の請求内訳に標準工事費分割支払代金調整が存在しているかチェック
	 * 
	 * @param inMap		入力電文
	 * @param prcKmkCd	料金項目コード
	 * @return 判定結果
	 * @throws Exception 	業務サービス内で発生した例外全般
	 */
	private boolean checkKjHiBktPrcKmkAdj(JBSbatServiceInterfaceMap inMap, String prcKmkCd) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getGetSeikyAmnt]");
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		paramList.setValue(inMap.get(JBSbatCHIFM352.SEIKY_SBT_CD));			// 請求種別コード
		paramList.setValue(inMap.get(JBSbatCHIFM352.SEIKY_KEI_NO_MT));		// 請求契約番号（譲渡元）
		paramList.setValue(inMap.get(JBSbatCHIFM352.SEIKY_YM_MT));			// 請求年月
		paramList.setValue(inMap.get(JBSbatCHIFM352.PRC_GRP_CD));			// 料金グループコード
		paramList.setValue(inMap.get(JBSbatCHIFM352.PCRS_CD));				// 料金コースコード
		paramList.setValue(inMap.get(JBSbatCHIFM352.PRC_SVC_CD));			// 料金サービスコード
		paramList.setValue(prcKmkCd);										// 変換後の料金項目コード
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getGetSeikyAmnt][paramList=" + paramList.getList().toString() + "]");
		
		// SQL実行
		executeCH_T_SEIKY_UCWK_CH_SELECT_025(paramList.getList().toArray());
		JBSbatCommonDBInterface dbMap = db_CH_T_SEIKY_UCWK.selectNext(); 
		
		// 取得出来ない場合
		if(dbMap == null)
		{
			// 該当データなしの場合、falseを設定する。
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getGetSeikyAmnt][該当データが存在しない場合 ]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getGetSeikyAmnt]");
			return false;
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getGetSeikyAmnt]");
		return true;
	}
	// v50.00.00 2020/08/17 ANK-3912-00-00 add end

}