/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JTUTshLoadZmSskkIcrnOperateCC
*	ソースファイル名：JTUTshLoadZmSskkIcrnOperateCC.java
*	作成者			：FJ
*	日付			：2024/02/28
*＜機能概要＞
*	他社読込済申請結果一覧操作の共通コンポーネント
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*   v72.00.00	2024/02/28	FJ)謝		【ANK-4494-00-00】【eo定期】 双方向番ポ対応
*   v72.00.01	2024/11/01	FJ)三角		【ANK-4494-23-00】【eo定期】 双方向番ポ対応
*	v75.00.00	2025/04/18	FJ)金		【ANK-4685-00-00】【eo】双方向番ポSTEP3
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.common.constant.JPCModelConstant;
import eo.common.constant.JTUStrConst;
import eo.common.util.JTUPortOutMskmDivJdg;
import eo.ejb.cbs.cbsmsg.ECC0041D010CBSMsg;
import eo.ejb.cbs.cbsmsg.ETU0151B010CBSMsg;
import eo.ejb.cbs.cbsmsg.ETU0151B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ETU0151B020CBSMsg;
import eo.ejb.cbs.cbsmsg.ETU0151B020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ETU0151B030CBSMsg;
import eo.ejb.cbs.cbsmsg.ETU0151B030CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ETU0151C030CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0261D010CBSMsg;

/**
 * 他社読込済申請結果一覧操作の共通コンポーネントクラスです。
 * <br>
 * @author 富士通
 *
 */
public class JTUTshLoadZmSskkIcrnOperateCC extends AbstractCommonComponent
{
	/** "1"(一覧照会) */
	private static final String TRANS_DIV_1 = "1";
	/** "2"(ＣＳＶ出力) */
	private static final String TRANS_DIV_2 = "2";
	
	/** 申込区分 "1"(新規申請) */
	private static final String MSKM_DIV_NEW = "1";
	/** 申込区分 "2"(記載変更) */
	private static final String MSKM_DIV_CHG = "2";
	
	/** ポートアウト受付情報一覧照会 */
	private static final String TEMPLATE_ID_ETU0151B010 = "ETU0151B010";
	/** ポートアウト受付情報一覧照会（新規申請件数） */
	private static final String TEMPLATE_ID_ETU0151B020 = "ETU0151B020";
	/** ポートアウト受付情報一覧照会（統合オーダID） */
	private static final String TEMPLATE_ID_ETU0151B030 = "ETU0151B030";
	/** ポートアウト受付情報ステータス変更 */
	private static final String TEMPLATE_ID_ETU0151C030 = "ETU0151C030";
	/** 電子ファイル管理登録 */
	private static final String TEMPLATE_ID_ECC0041D010 = "ECC0041D010";
	/** ダウンロードファイル管理登録 */
	private static final String TEMPLATE_ID_EZM0261D010 = "EZM0261D010";
	
	/** 処理管理番号 他社番ポ申請可否ファイル */
	private static final String TRN_KANRI_NO_000000000269 = "000000000269";
	/** 処理管理番号 他社番ポ申請ＳＯ手配スキップファイル */
	private static final String TRN_KANRI_NO_000000000270 = "000000000270";
	
	/** "3"(表示ページに該当するデータなし) */
	private static final String NO_DATA = "3";
	/** "1"(１ページ目) */
	private static final String PAGE_1 = "1";
	
	/**
	 * 他社読込済申請結果一覧操作を行う。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws Throwable 例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite execute(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	throws Throwable
	{
		String dataMapKey = fixedText;
		
		// 他社読込済申請結果一覧操作CCマップ
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		if (ccMsg == null)
		{
			return param;
		}
		// 戻り値初期化
		// 総検索件数
		ccMsg.put("total_search_num", "0");
		// 総ページ数
		ccMsg.put("total_page_num", "0");
		// 検索エラーフラグ
		ccMsg.put("search_err_flg", "");
		// 合計提供可否件数
		ccMsg.put("gk_tk_kh_cnt", "0");
		// 合計未処理件数
		ccMsg.put("gk_mi_trn_cnt", "0");
		// エラーメッセージＩＤ
		ccMsg.put("err_msg_id", "");
		// エラーメッセージ置換文字列
		ccMsg.put("err_msg_replace_moji", "");
		// 検索結果リスト
		ccMsg.put("search_rslt_list", new ArrayList<HashMap<String, Object>>());
		
		// 検索処理パターン
		String searchType = nullToStr((String)ccMsg.get("search_type"));
		// 最大検索件数
		String maxSearchNum = nullToStr((String)ccMsg.get("max_search_num"));
		// 表示件数
		String displayNum = nullToStr((String)ccMsg.get("display_num"));
		// 表示ページ番号
		String displayPageNum = nullToStr((String)ccMsg.get("display_page_num"));
		// 処理区分
		String tranDiv = nullToStr((String)ccMsg.get("tran_div"));
		
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// 一覧照会の場合
		if (TRANS_DIV_1.equals(tranDiv))
		{
			// ポートアウト受付情報一覧照会
			CAANMsg etu0151b010Msg = execETU0151B010(handle, scCall, param, fixedText, searchType, maxSearchNum, displayNum, displayPageNum);
			
			if (etu0151b010Msg != null)
			{
				String searchErrFlg =  nullToStr(etu0151b010Msg.getString(ETU0151B010CBSMsg.SEARCH_ERR_FLG));
				
				if (NO_DATA.equals(searchErrFlg))
				{
					// 再検索の場合は"1"(１ページ目)を設定する
					// ポートアウト受付情報一覧照会
					etu0151b010Msg = execETU0151B010(handle, scCall, param, fixedText, searchType, maxSearchNum, displayNum, PAGE_1);
				}
				
				if (etu0151b010Msg != null)
				{
					ArrayList<Map> msgList = new ArrayList<Map>();
					
					ccMsg.put("total_search_num", nullToStr(etu0151b010Msg.getString(ETU0151B010CBSMsg.TOTAL_SEARCH_NUM)));
					ccMsg.put("total_page_num",  nullToStr(etu0151b010Msg.getString(ETU0151B010CBSMsg.TOTAL_PAGE_NUM)));
					
					if (NO_DATA.equals(searchErrFlg))
					{
						// 再検索の場合は"3"(表示ページに該当するデータなし)を設定する
						ccMsg.put("search_err_flg", NO_DATA);
					}
					else
					{
						ccMsg.put("search_err_flg",  nullToStr(etu0151b010Msg.getString(ETU0151B010CBSMsg.SEARCH_ERR_FLG)));
					}
					
					CAANMsg[] etu0151b010Msg1List = etu0151b010Msg.getCAANMsgList(ETU0151B010CBSMsg.ETU0151B010CBSMSG1LIST);
					
					if(etu0151b010Msg1List != null)
					{
						for (CAANMsg caanMsg: etu0151b010Msg1List)
						{
							HashMap msgMap = new HashMap<String, Object>();
							
							// 旧統合オーダID
							String oldTogoOrderId = nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.OLD_TOGO_ORDER_ID));
							// キャンセル識別
							String cancelSkbt = nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.CANCEL_SKBT));
							// 取消識別
							String clSkbt = nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.CL_SKBT));
							
							// 申込区分
							String mskmDiv = JTUPortOutMskmDivJdg.getPortOutMskmDiv(oldTogoOrderId, cancelSkbt, clSkbt);
							msgMap.put("mskm_div", mskmDiv);
							// 申込区分名称
							String mskmDivNm = JTUPortOutMskmDivJdg.getPortOutMskmDivNm(oldTogoOrderId, cancelSkbt, clSkbt);
							msgMap.put("mskm_div_nm", mskmDivNm);
							// ステータス
							msgMap.put("stat", nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.PORT_OUT_STAT)));
							// ステータス名称
							msgMap.put("stat_nm", nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.PORT_OUT_STAT_NM)));
							// 統合オーダＩＤ
							msgMap.put("togo_order_id", nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.TOGO_ODR_ID)));
							// オーダ番号
							msgMap.put("order_no", nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.BMP_ORDER_NO)));
							// 注文種類名称
							msgMap.put("chumn_kind_nm", nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.CHUMN_KIND_NM)));
							// 個人法人名称
							msgMap.put("kojin_hojin_nm", nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.HOJIN_KOJIN_CD_NM)));
							// 電話番号
							msgMap.put("telno", nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.TELNO)));
							// 契約者名義
							msgMap.put("keisha_nm", nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.PORT_OUT_KEISHA_NM)));
							// 工事希望日
							msgMap.put("koji_kibod", nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.KOJI_KIBO_YMD)));
							// 工事時間帯区分
							msgMap.put("koji_timez_div", nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.KOJI_TIMEZ_DIV)));
							// 工事実施方法名称
							msgMap.put("koji_jssi_way_nm", nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.KOJI_JSSI_WAY_NM)));
							// 複数番号有無名称
							msgMap.put("hukusu_no_um_nm", nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.HUKUSU_NO_UM_NM)));
							// 提供可否
							msgMap.put("tk_kh", nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.TK_KH)));
							// 提供不可理由
							msgMap.put("tk_fail_rsn", nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.TK_FAIL_RSN)));
							// 移転先事業者名
							msgMap.put("itens_jigyosha_nm", nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.ITENS_JIGYOSHA_NM)));
							// ポートアウト番号
							msgMap.put("port_out_no", nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.PORT_OUT_NO)));
							// 世代登録年月日時分秒
							msgMap.put("gene_add_dtm", nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.GENE_ADD_DTM)));
							// 受付担当ＩＤ
							msgMap.put("uk_tnt_id", nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.UK_TNT_ID)));
							// 受付担当名
							msgMap.put("uk_tnt_nm", nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.UK_TNT_ID_NM)));
							// 更新年月日時分秒
							msgMap.put("upd_dtm", nullToStr(caanMsg.getString(ETU0151B010CBSMsg1List.UPD_DTM)));
							msgList.add(msgMap);
						}
					}
					
					ccMsg.put("search_rslt_list", msgList);
				}
			}
			
			// ポートアウト受付情報一覧照会（新規申請件数）
			CAANMsg etu0151b020MsgGk = execETU0151B020(handle, scCall, param, fixedText, "");
			
			if (etu0151b020MsgGk != null)
			{
				// 合計提供可否件数
				ccMsg.put("gk_tk_kh_cnt", nullToStr(etu0151b020MsgGk.getString(ETU0151B020CBSMsg1List.SEARCH_CNT)));
				
				// ポートアウト受付情報一覧照会（新規申請件数）
				CAANMsg etu0151b020MsgGkMiTrn = execETU0151B020(handle, scCall, param, fixedText, JTUStrConst.PORT_OUT_STAT_MI);
				
				if (etu0151b020MsgGkMiTrn != null)
				{
					// 合計未処理件数
					ccMsg.put("gk_mi_trn_cnt", nullToStr(etu0151b020MsgGkMiTrn.getString(ETU0151B020CBSMsg1List.SEARCH_CNT)));
				}
			}
		}
		// CSV出力の場合
		else if (TRANS_DIV_2.equals(tranDiv))
		{
			// 申込区分が新規申請、記載変更以外の場合
			if (!JTUStrConst.UM_YK.equals((String)ccMsg.get("key_mkm_div_new_shin")) && !JTUStrConst.UM_YK.equals((String)ccMsg.get("key_mkm_div_kisai_chg")))
			{
				// エラーメッセージＩＤ
				ccMsg.put("err_msg_id", "EKB9070-KW");
				// エラーメッセージ置換文字列
				ccMsg.put("err_msg_replace_moji", "出力対象件数,0件");
				
				return param;
			}
			
			// ポートアウトステータスが処理済以外の場合
			if (!JTUStrConst.UM_YK.equals((String)ccMsg.get("key_stat_trn_zm")))
			{
				// エラーメッセージＩＤ
				ccMsg.put("err_msg_id", "EKB9070-KW");
				// エラーメッセージ置換文字列
				ccMsg.put("err_msg_replace_moji", "出力対象件数,0件");
				
				return param;
			}
			
			// 他社番ポ申請可否ファイル出力用
			ArrayList<HashMap<String, Object>> tasyaKekaList = new ArrayList<HashMap<String,Object>>();
			// 他社番ポ申請SO手配スキップファイル出力用
			ArrayList<HashMap<String, Object>> tasyaSoList = new ArrayList<HashMap<String,Object>>();
			
			// ハイフン処理用のInMsgを取得
			HashMap<String, Object> tlnMap = JTUBPCommon.getEditInMsg_Tln(param);
			
			// ポートアウト受付情報一覧照会（CSV出力用）
			CAANMsg[] etu0151b010Msg1ListCsv = execETU0151B010CsvOutput(handle, scCall, param, fixedText, JPCModelConstant.SAERCH_TYPE_IKT, maxSearchNum, maxSearchNum, PAGE_1);
			
			if(etu0151b010Msg1ListCsv != null && etu0151b010Msg1ListCsv.length > 0)
			{
				for (CAANMsg caanMsgCsv: etu0151b010Msg1ListCsv)
				{
					// 統合オーダID
					String togoOdrId = nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.TOGO_ODR_ID));
					// オーダ可否判定提供可否
					String odkhJudgeTkKh = nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.ODKH_JUDGE_TK_KH));
					// 番号取得_代表事業者番号
					String noskDaihyoJgsNo = nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.NOSK_DAIHYO_JGS_NO));
					
					// 整合性チェック
					// ポートアウト受付情報一覧照会（統合オーダID）
					CAANMsg[] etu0151b030Msg1List = execETU0151B030(handle, scCall, param, fixedText, togoOdrId);
					if (etu0151b030Msg1List != null && etu0151b030Msg1List.length > 0)
					{
						for (CAANMsg etu0151b030Msg: etu0151b030Msg1List)
						{
							// ポートアウトステータス
							String portOutStat = nullToStr(etu0151b030Msg.getString(ETU0151B030CBSMsg1List.PORT_OUT_STAT));
							// オーダ可否判定提供可否
							String odkhJudgeTkKhChk = nullToStr(etu0151b030Msg.getString(ETU0151B030CBSMsg1List.ODKH_JUDGE_TK_KH));
							// 旧統合オーダID
							String oldTogoOrderIdChk = nullToStr(etu0151b030Msg.getString(ETU0151B030CBSMsg1List.OLD_TOGO_ORDER_ID));
							// キャンセル識別
							String cancelSkbtChk = nullToStr(etu0151b030Msg.getString(ETU0151B030CBSMsg1List.CANCEL_SKBT));
							// 取消識別
							String clSkbtChk = nullToStr(etu0151b030Msg.getString(ETU0151B030CBSMsg1List.CL_SKBT));
							// 申込区分
							String mskmDivChk = JTUPortOutMskmDivJdg.getPortOutMskmDiv(oldTogoOrderIdChk, cancelSkbtChk, clSkbtChk);
							
							// 申込区分が新規申請、記載変更以外の場合、チェックしない
							if (!MSKM_DIV_NEW.equals(mskmDivChk) && !MSKM_DIV_CHG.equals(mskmDivChk))
							{
								continue;
							}
							
							// ステータスが処理済でない申請が存在する場合
							if (!JTUStrConst.PORT_OUT_STAT_SYRZM.equals(portOutStat))
							{
								// エラーメッセージＩＤ
								ccMsg.put("err_msg_id", "EKBG020-KW");
								// エラーメッセージ置換文字列
								ccMsg.put("err_msg_replace_moji", togoOdrId + ",処理済でない");
								
								return param;
							}
							
							// オーダ可否判定提供可否が異なる申請が存在する場合
							if (!odkhJudgeTkKh.equals(odkhJudgeTkKhChk))
							{
								// エラーメッセージＩＤ
								ccMsg.put("err_msg_id", "EKBG020-KW");
								// エラーメッセージ置換文字列
								ccMsg.put("err_msg_replace_moji", togoOdrId + ",可否回答が異なる");
								
								return param;
							}
						}
					}
					
					HashMap<String, Object> tasyaKekaMap = new HashMap<String, Object>();
					
					// 受付担当電話番号（ハイフン編集）
					String ukTntTelno = JTUBPCommon.editTln(handle, tlnMap, nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.UK_TNT_TELNO)));
					// 工事担当電話番号（ハイフン編集）
					String kojiTntTelno = JTUBPCommon.editTln(handle, tlnMap, nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.KOJI_TNT_TELNO)));
					// 電話番号（ハイフン編集）
					String telno = JTUBPCommon.editTln(handle, tlnMap, nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.TELNO)));
					
					// 統合オーダID
					tasyaKekaMap.put("togo_odr_id", nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.TOGO_ODR_ID)));
					// オーダ番号
					tasyaKekaMap.put("bmp_order_no", nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.BMP_ORDER_NO)));
					// 記事欄_移転先事業者向け
					tasyaKekaMap.put("kijiran_itens_jgsmk", nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.KIJIRAN_ITENS_JGSMK)));
					// 自社内記事欄
					tasyaKekaMap.put("ji_shanai_kijiran", nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.JI_SHANAI_KIJIRAN)));
					// オーダ可否判定提供可否
					tasyaKekaMap.put("odkh_judge_tk_kh", nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.ODKH_JUDGE_TK_KH)));
					// オーダ可否判定提供不可理由
					tasyaKekaMap.put("odkh_judge_tk_fail_rsn", nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.ODKH_JUDGE_TK_FAIL_RSN)));
					// オーダ可否判定提供不可理由_その他の理由
					tasyaKekaMap.put("odkh_jdgtk_frsn_otr_rsn", nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.ODKH_JDGTK_FRSN_OTR_RSN)));
					// 受付担当名
					tasyaKekaMap.put("uk_tnt_id_nm", nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.UK_TNT_ID_NM)));
					// 受付担当電話番号
					tasyaKekaMap.put("uk_tnt_telno", ukTntTelno);
					// 工事担当名
					tasyaKekaMap.put("koji_tnt_nm", nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.KOJI_TNT_NM)));
					// 工事担当電話番号
					tasyaKekaMap.put("koji_tnt_telno", kojiTntTelno);
					// 電話番号
					tasyaKekaMap.put("telno", telno);
					// 識別番号
					tasyaKekaMap.put("skbt_no", nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.SKBT_NO)));
					// 提供可否
					tasyaKekaMap.put("tk_kh", nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.TK_KH)));
					// 提供不可理由
					tasyaKekaMap.put("tk_fail_rsn", nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.TK_FAIL_RSN)));
					// 提供不可理由_その他の理由
					tasyaKekaMap.put("tk_fail_rsn_otr_rsn", nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.TK_FAIL_RSN_OTR_RSN)));
					
					tasyaKekaList.add(tasyaKekaMap);
					
					// 発番事業者がオプテージの場合
// ANK-4494-23-00 MOD START
//					if (JTUStrConst.TSJGS_CD_OPTG.equals(noskDaihyoJgsNo))
					// 提供可否
					String tkKh = nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.TK_KH));
					
					if (JTUStrConst.TSJGS_CD_OPTG.equals(noskDaihyoJgsNo) && JTUStrConst.TK_KH_PSG.equals(tkKh)
							&& (JTUStrConst.TK_KH_PSG.equals(odkhJudgeTkKh) || "".equals(odkhJudgeTkKh)))
// ANK-4494-23-00 MOD END
					{
						HashMap<String, Object> tasyaSoMap = new HashMap<String, Object>();
						
						// オーダ番号
						tasyaSoMap.put("bmp_order_no", nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.BMP_ORDER_NO)));
						// 番号取得_SO手配の担当名（工事担当名）
						tasyaSoMap.put("koji_tnt_nm", nullToStr(caanMsgCsv.getString(ETU0151B010CBSMsg1List.KOJI_TNT_NM)));
						// 番号取得_SO手配の担当電話番号（工事担当電話番号）
						tasyaSoMap.put("koji_tnt_telno", kojiTntTelno);
						
						tasyaSoList.add(tasyaSoMap);
					}
				}
			}
			
			// 他社番ポ申請可否リストが存在する場合
			if(tasyaKekaList.size() > 0)
			{
				// 統合オーダID、オーダ番号、電話番号でソート
				Collections.sort(tasyaKekaList, new JTUTshLoadZmSskkIcrnOperateCCSort1());
				
				// ファイル削除年月日設定(電子ファイル管理、ダウンロードファイル管理共通)
				String opeDate = JCCBPCommon.getOpeDate(null);
				String fileDelYmd = JTUBPCommon.addDay(opeDate, Integer.parseInt(JTUStrConst.FILE_DEL_DAY_CNT_TASYA));
				
				// SJISのバイト配列に変換して返す
				byte[] tasyaKekaCsvData = getCSVDataTasyaKeka(tasyaKekaList);
				
				// 他社番ポ申請可否ファイル名設定
				String tasyaKekaFileNm = JTUStrConst.FILE_TASYA_KEKA.replace(JTUStrConst.DATE_YMDHMS, JCCBPCommon.getSysDateTime());
				
				// 電子ファイル管理登録
				CAANMsg ecc0041d010Msg = execECC0041D010(handle, scCall, param, dataMapKey, tasyaKekaCsvData, fileDelYmd);
				
				// ダウンロードファイル管理登録
				execEZM0261D010(handle, scCall, param, dataMapKey, ecc0041d010Msg, TRN_KANRI_NO_000000000269, tasyaKekaFileNm, String.valueOf(tasyaKekaList.size()), fileDelYmd);
				
				// 他社番ポ申請SO手配スキップが存在する場合
				if (tasyaSoList.size() > 0)
				{
					// オーダ番号でソート
					Collections.sort(tasyaSoList, new JTUTshLoadZmSskkIcrnOperateCCSort2());
					
					// SJISのバイト配列に変換して返す
					byte[] tasyaSoCsvData = getCSVDataTasyaSo(tasyaSoList);
					
					// 他社番ポ申請SO手配スキップファイル名設定
					String tasyaSoFileNm = JTUStrConst.FILE_TASYA_SO.replace(JTUStrConst.DATE_YMDHMS, JCCBPCommon.getSysDateTime());
					
					// 電子ファイル管理登録
					CAANMsg ecc0041d010MsgSo = execECC0041D010(handle, scCall, param, dataMapKey, tasyaSoCsvData, fileDelYmd);
					
					// ダウンロードファイル管理登録
					execEZM0261D010(handle, scCall, param, dataMapKey, ecc0041d010MsgSo, TRN_KANRI_NO_000000000270, tasyaSoFileNm, String.valueOf(tasyaSoList.size()), fileDelYmd);
				}
				
				// ポートアウト申請のステータスをCSV出力済に変更する
				for (CAANMsg caanMsgCsv: etu0151b010Msg1ListCsv)
				{
					execETU0151C030(handle, scCall, param, dataMapKey, caanMsgCsv);
				}
			}
			else
			{
				// エラーメッセージＩＤ
				ccMsg.put("err_msg_id", "EKB9070-KW");
				// エラーメッセージ置換文字列
				ccMsg.put("err_msg_replace_moji", "出力対象件数,0件");
				
				return param;
			}
		}
		
		return param;
	}
	
	/**
	 * CSV形式のバイナリデータに変換する
	 * @param tasyaKekaList
	 * @return byte[]
	 * @throws Exception
	 */
	private byte[] getCSVDataTasyaKeka(ArrayList<HashMap<String, Object>> tasyaKekaList) throws Exception
	{
		StringBuffer tasyaKekaSb = new StringBuffer();
		
		// ***** CSVデータ部編集 *****
		for(int i = 0; i < tasyaKekaList.size(); i++)
		{
			HashMap<String, Object> childMap = (HashMap<String, Object>)tasyaKekaList.get(i);
			
			// 統合オーダID
			tasyaKekaSb.append((String)childMap.get("togo_odr_id"));
			// オーダ番号
			tasyaKekaSb.append(JTUStrConst.CSV + (String)childMap.get("bmp_order_no"));
			// 記事欄_移転先事業者向け
			tasyaKekaSb.append(JTUStrConst.CSV + (String)childMap.get("kijiran_itens_jgsmk"));
			// 自社内記事欄
			tasyaKekaSb.append(JTUStrConst.CSV + (String)childMap.get("ji_shanai_kijiran"));
			// オーダ可否判定提供可否
			tasyaKekaSb.append(JTUStrConst.CSV + (String)childMap.get("odkh_judge_tk_kh"));
			// オーダ可否判定提供不可理由
			tasyaKekaSb.append(JTUStrConst.CSV + (String)childMap.get("odkh_judge_tk_fail_rsn"));
			// オーダ可否判定提供不可理由_その他の理由
			tasyaKekaSb.append(JTUStrConst.CSV + (String)childMap.get("odkh_jdgtk_frsn_otr_rsn"));
			// 受付担当名
			tasyaKekaSb.append(JTUStrConst.CSV + (String)childMap.get("uk_tnt_id_nm"));
			// 受付担当電話番号
			tasyaKekaSb.append(JTUStrConst.CSV + (String)childMap.get("uk_tnt_telno"));
			// 工事担当名
			tasyaKekaSb.append(JTUStrConst.CSV + (String)childMap.get("koji_tnt_nm"));
			// 工事担当電話番号
			tasyaKekaSb.append(JTUStrConst.CSV + (String)childMap.get("koji_tnt_telno"));
			// 電話番号
			tasyaKekaSb.append(JTUStrConst.CSV + (String)childMap.get("telno"));
			// 識別番号
			tasyaKekaSb.append(JTUStrConst.CSV + (String)childMap.get("skbt_no"));
			// 提供可否
			tasyaKekaSb.append(JTUStrConst.CSV + (String)childMap.get("tk_kh"));
			// 提供不可理由
			tasyaKekaSb.append(JTUStrConst.CSV + (String)childMap.get("tk_fail_rsn"));
			// 提供不可理由_その他の理由
			tasyaKekaSb.append(JTUStrConst.CSV + (String)childMap.get("tk_fail_rsn_otr_rsn"));
			// 改行
			tasyaKekaSb.append(JTUStrConst.LINE_CRLF);
		}
		
		// UTF8のバイト配列に変換して返す
		return JTUBPCommon.toBytes(tasyaKekaSb.toString(), JTUStrConst.CHOHYO_ENCODING);
	}
	
	
	/**
	 * CSV形式のバイナリデータに変換する
	 * @param tasyaKekaList
	 * @return byte[]
	 * @throws Exception
	 */
	private byte[] getCSVDataTasyaSo(ArrayList<HashMap<String, Object>> tasyaSoList) throws Exception
	{
		StringBuffer tasyaSoSb = new StringBuffer();
		
		// ***** CSVデータ部編集 *****
		for(int i = 0; i < tasyaSoList.size(); i++)
		{
			HashMap<String, Object> childMap = (HashMap<String, Object>)tasyaSoList.get(i);
			
			// オーダ番号
			tasyaSoSb.append((String)childMap.get("bmp_order_no"));
			// 工事担当名
			tasyaSoSb.append(JTUStrConst.CSV + (String)childMap.get("koji_tnt_nm"));
			// 工事担当電話番号
			tasyaSoSb.append(JTUStrConst.CSV + (String)childMap.get("koji_tnt_telno"));
			// 改行
			tasyaSoSb.append(JTUStrConst.LINE_CRLF);
		}
		
		// UTF8のバイト配列に変換して返す
		return JTUBPCommon.toBytes(tasyaSoSb.toString(), JTUStrConst.CHOHYO_ENCODING);
	}
	
	/**
	 * @param param
	 * @param mappingData
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param,
												Object[][] mappingData) throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// 【取得元：電文ヘッダ(ヘッダ)】
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// 【取得元：ユーザエリア(コントロールマップ)】
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		
		String svcIf = (String)mappingData[0][1];
		
		CAANMsg template = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg", svcIf));

		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));
		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));
		
		for (int i = 0; i < mappingData.length; i++)
		{
			/* CAANMsg[]の場合 */
			if (mappingData[i][1] instanceof CAANMsg[])
			{
				 template.set((String)mappingData[i][0], (CAANMsg[])mappingData[i][1]);
			}
			/* CAANMsg[]の以外 */
			else
			{
				/* nullの場合*/
				if ("".equals(mappingData[i][1]))
				{
					template.setNull((String)mappingData[i][0]);
				}
				/* 他の場合*/
				else
				{
					template.set((String)mappingData[i][0], mappingData[i][1]);
				}
			}
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}
	
	/**
	 * 
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @param dataMapKey
	 * @param mappingData
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoCom(IRequestParameterReadWrite param,
														CAANMsg[] templates, 
														int returnCode,
														String dataMapKey,
														Object[][] mappingData) throws RequestParameterException
	{
		// 本来はサービスインターフェイス分の処理が必要
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		/* 0以外のとき */
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		
		/* nullのとき */
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		/* nullの場合 */
		if (obj == null)
		{
			bpStatus = -1;
		}
		/* 他の場合 */
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}
		/* セクタが比べる*/
		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		HashMap<String, String> inMap = null;

		// ユーザデータ情報
		inMap = (HashMap<String, String>)param.getData(dataMapKey);
		
		for (int i = 0; i < mappingData.length; i++)
		{
			/* nullチェック　*/
			if (!template.isNull(mappingData[i][0] + "_err"))
			{
				/* ユーザデータ情報にエラーを確認する　*/
				if (!inMap.containsKey(mappingData[i][0] + "_err"))
				{
					inMap.put(mappingData[i][0] + "_err", template.getString(mappingData[i][0] + "_err"));
				}
			}
		}
		return param;
	}
	
	/**
	 * SC(サービスインターフェイス）を呼び出す。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param mappingData
	 * @return CAANMsg
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSC(SessionHandle handle, 
							ServiceComponentRequestInvoker scCall, 
							IRequestParameterReadWrite param, 
							String dataMapKey,
							Object[][] mappingData) throws Exception
	{
		HashMap<String, Object> paramMap = editInMsg(param, mappingData);
		
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		
		// リターンコード取得
		Object return_code = result.get(JCMConstants.RET_CD_INT_KEY);
		int status = msg.getInt(JCMConstants.STATUS_INT_KEY);
		
		editErrorInfoCom(param, templates, (Integer)return_code, dataMapKey, mappingData);
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		
		/* エラー情報のマップないとき、新しいエラー情報をイニシャライズする*/
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));
		
		/* 異常の場合、SCCallExceptionを生成してスローする */
		if (!("0".equals(return_code.toString()) && 0 == status))
		{
			throw new SCCallException("戻り値不正", return_code.toString(), status);
		}
		return msg;
	}
	
	/**
	 * ポートアウト受付情報一覧照会を行う。
	 * @param handle セッションハンドル
	 * @param scCall SC呼出
	 * @param param パラメーター
	 * @param dataMapKey データマップキー
	 * @param searchType 検索処理パターン
	 * @param maxSearchNum 最大検索件数
	 * @param displayNum 表示件数
	 * @param displayPageNum 表示ページ番号
	 * @return CAANMsg
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg execETU0151B010(SessionHandle handle,
									ServiceComponentRequestInvoker scCall,
									IRequestParameterReadWrite param,
									String dataMapKey,
									String searchType,
									String maxSearchNum,
									String displayNum,
									String displayPageNum) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		Object[][] etu0151b010In =
		{
			{ETU0151B010CBSMsg.TEMPLATEID, TEMPLATE_ID_ETU0151B010},
			{ETU0151B010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{ETU0151B010CBSMsg.SEARCH_TYPE, searchType},
			{ETU0151B010CBSMsg.MAX_SEARCH_NUM, maxSearchNum},
			{ETU0151B010CBSMsg.DISPLAY_NUM, displayNum},
			{ETU0151B010CBSMsg.DISPLAY_PAGE_NUM, displayPageNum},
			//ANK-4685-00-00 MOD START
//			{ETU0151B010CBSMsg.KEY_PORT_OUT_UK_TRKM_YMD, nullToStr((String)ccMsg.get("key_trkm_day"))},
			{ETU0151B010CBSMsg.KEY_PORT_OUT_UK_TRKM_YMD_STA, nullToStr((String)ccMsg.get("key_trkm_day_sta"))},
			{ETU0151B010CBSMsg.KEY_PORT_OUT_UK_TRKM_YMD_END, nullToStr((String)ccMsg.get("key_trkm_day_end"))},
			{ETU0151B010CBSMsg.KEY_TELNO, nullToStr((String)ccMsg.get("key_telno"))},
			{ETU0151B010CBSMsg.KEY_UK_TNT_NM, nullToStr((String)ccMsg.get("key_uk_tnt_nm"))},
			//ANK-4685-00-00 MOD END
			{ETU0151B010CBSMsg.KEY_MKM_DIV_NEW_SHIN, nullToStr((String)ccMsg.get("key_mkm_div_new_shin"))},
			{ETU0151B010CBSMsg.KEY_MKM_DIV_KISAI_CHG, nullToStr((String)ccMsg.get("key_mkm_div_kisai_chg"))},
			{ETU0151B010CBSMsg.KEY_MKM_DIV_CNCL, nullToStr((String)ccMsg.get("key_mkm_div_cncl"))},
			{ETU0151B010CBSMsg.KEY_MKM_DIV_CNCL_CL, nullToStr((String)ccMsg.get("key_mkm_div_cncl_cl"))},
			{ETU0151B010CBSMsg.KEY_MKM_DIV_CL, nullToStr((String)ccMsg.get("key_mkm_div_cl"))},
			{ETU0151B010CBSMsg.KEY_STAT_TRN_MI, nullToStr((String)ccMsg.get("key_stat_trn_mi"))},
			{ETU0151B010CBSMsg.KEY_STAT_TRN_CHU, nullToStr((String)ccMsg.get("key_stat_trn_chu"))},
			{ETU0151B010CBSMsg.KEY_STAT_TRN_ZM, nullToStr((String)ccMsg.get("key_stat_trn_zm"))},
			{ETU0151B010CBSMsg.KEY_STAT_CSV_OPUTZM, nullToStr((String)ccMsg.get("key_stat_csv_oputzm"))},
			{ETU0151B010CBSMsg.KEY_STAT_KJ_FIN, nullToStr((String)ccMsg.get("key_stat_kj_fin"))},
			{ETU0151B010CBSMsg.KEY_CHUMN_KIND_BMP_ITEN, nullToStr((String)ccMsg.get("key_chumn_kind_bmp_iten"))},
			{ETU0151B010CBSMsg.KEY_CHUMN_KIND_BMP_RETURN, nullToStr((String)ccMsg.get("key_chumn_kind_bmp_return"))},
			{ETU0151B010CBSMsg.KEY_CHUMN_KIND_JGSK_ITEN, nullToStr((String)ccMsg.get("key_chumn_kind_jgsk_iten"))},
			{ETU0151B010CBSMsg.KEY_CHUMN_KIND_BMP_HAISHI, nullToStr((String)ccMsg.get("key_chumn_kind_bmp_haishi"))},
			{ETU0151B010CBSMsg.KEY_TK_KH_KA_ANSWER, nullToStr((String)ccMsg.get("key_tk_kh_ka_answer"))},
			{ETU0151B010CBSMsg.KEY_TK_KH_HI_ANSWER, nullToStr((String)ccMsg.get("key_tk_kh_hi_answer"))},
			{ETU0151B010CBSMsg.KEY_TK_KH_MI_ANSWER, nullToStr((String)ccMsg.get("key_tk_kh_mi_answer"))},
			{ETU0151B010CBSMsg.KEY_KOJIN_HJIN_KOJIN, nullToStr((String)ccMsg.get("key_kojin_hjin_kojin"))},
			{ETU0151B010CBSMsg.KEY_KOJIN_HJIN_HJIN, nullToStr((String)ccMsg.get("key_kojin_hjin_hjin"))},
			//ANK-4685-00-00 ADD START
			{ETU0151B010CBSMsg.KEY_ITENM_NOSK_ITENM, nullToStr((String)ccMsg.get("key_itenm_nosk_itenm"))},
			{ETU0151B010CBSMsg.KEY_ITENM_NOSK_NOSK, nullToStr((String)ccMsg.get("key_itenm_nosk_nosk"))}
			//ANK-4685-00-00 ADD END
		};
		
		CAANMsg etu0151b010Msg = callSC(handle, scCall, param, dataMapKey, etu0151b010In);
		
		return etu0151b010Msg;
	}
	
	/**
	 * ポートアウト受付情報一覧照会（CSV出力用）を行う。
	 * @param handle セッションハンドル
	 * @param scCall SC呼出
	 * @param param パラメーター
	 * @param dataMapKey データマップキー
	 * @param searchType 検索処理パターン
	 * @param maxSearchNum 最大検索件数
	 * @param displayNum 表示件数
	 * @param displayPageNum 表示ページ番号
	 * @return CAANMsg[]
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg[] execETU0151B010CsvOutput(SessionHandle handle,
									ServiceComponentRequestInvoker scCall,
									IRequestParameterReadWrite param,
									String dataMapKey,
									String searchType,
									String maxSearchNum,
									String displayNum,
									String displayPageNum) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		Object[][] etu0151b010In =
		{
			{ETU0151B010CBSMsg.TEMPLATEID, TEMPLATE_ID_ETU0151B010},
			{ETU0151B010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{ETU0151B010CBSMsg.SEARCH_TYPE, searchType},
			{ETU0151B010CBSMsg.MAX_SEARCH_NUM, maxSearchNum},
			{ETU0151B010CBSMsg.DISPLAY_NUM, displayNum},
			{ETU0151B010CBSMsg.DISPLAY_PAGE_NUM, displayPageNum},
			//ANK-4685-00-00 MOD START
//			{ETU0151B010CBSMsg.KEY_PORT_OUT_UK_TRKM_YMD, nullToStr((String)ccMsg.get("key_trkm_day"))},
			{ETU0151B010CBSMsg.KEY_PORT_OUT_UK_TRKM_YMD_STA, nullToStr((String)ccMsg.get("key_trkm_day_sta"))},
			{ETU0151B010CBSMsg.KEY_PORT_OUT_UK_TRKM_YMD_END, nullToStr((String)ccMsg.get("key_trkm_day_end"))},
			{ETU0151B010CBSMsg.KEY_TELNO, nullToStr((String)ccMsg.get("key_telno"))},
			{ETU0151B010CBSMsg.KEY_UK_TNT_NM, nullToStr((String)ccMsg.get("key_uk_tnt_nm"))},
			//ANK-4685-00-00 MOD END
			{ETU0151B010CBSMsg.KEY_MKM_DIV_NEW_SHIN, nullToStr((String)ccMsg.get("key_mkm_div_new_shin"))},
			{ETU0151B010CBSMsg.KEY_MKM_DIV_KISAI_CHG, nullToStr((String)ccMsg.get("key_mkm_div_kisai_chg"))},
			{ETU0151B010CBSMsg.KEY_MKM_DIV_CNCL, JTUStrConst.UM_NON},
			{ETU0151B010CBSMsg.KEY_MKM_DIV_CNCL_CL, JTUStrConst.UM_NON},
			{ETU0151B010CBSMsg.KEY_MKM_DIV_CL, JTUStrConst.UM_NON},
			{ETU0151B010CBSMsg.KEY_STAT_TRN_MI, JTUStrConst.UM_NON},
			{ETU0151B010CBSMsg.KEY_STAT_TRN_CHU, JTUStrConst.UM_NON},
			{ETU0151B010CBSMsg.KEY_STAT_TRN_ZM, nullToStr((String)ccMsg.get("key_stat_trn_zm"))},
			{ETU0151B010CBSMsg.KEY_STAT_CSV_OPUTZM, JTUStrConst.UM_NON},
			{ETU0151B010CBSMsg.KEY_STAT_KJ_FIN, JTUStrConst.UM_NON},
			{ETU0151B010CBSMsg.KEY_CHUMN_KIND_BMP_ITEN, nullToStr((String)ccMsg.get("key_chumn_kind_bmp_iten"))},
			{ETU0151B010CBSMsg.KEY_CHUMN_KIND_BMP_RETURN, nullToStr((String)ccMsg.get("key_chumn_kind_bmp_return"))},
			{ETU0151B010CBSMsg.KEY_CHUMN_KIND_JGSK_ITEN, nullToStr((String)ccMsg.get("key_chumn_kind_jgsk_iten"))},
			{ETU0151B010CBSMsg.KEY_CHUMN_KIND_BMP_HAISHI, nullToStr((String)ccMsg.get("key_chumn_kind_bmp_haishi"))},
			{ETU0151B010CBSMsg.KEY_TK_KH_KA_ANSWER, nullToStr((String)ccMsg.get("key_tk_kh_ka_answer"))},
			{ETU0151B010CBSMsg.KEY_TK_KH_HI_ANSWER, nullToStr((String)ccMsg.get("key_tk_kh_hi_answer"))},
			{ETU0151B010CBSMsg.KEY_TK_KH_MI_ANSWER, nullToStr((String)ccMsg.get("key_tk_kh_mi_answer"))},
			{ETU0151B010CBSMsg.KEY_KOJIN_HJIN_KOJIN, nullToStr((String)ccMsg.get("key_kojin_hjin_kojin"))},
			{ETU0151B010CBSMsg.KEY_KOJIN_HJIN_HJIN, nullToStr((String)ccMsg.get("key_kojin_hjin_hjin"))}
		};
		
		CAANMsg etu0151b010Msg = callSC(handle, scCall, param, dataMapKey, etu0151b010In);
		
		CAANMsg[] etu0151b010Msg1List = etu0151b010Msg.getCAANMsgList(ETU0151B010CBSMsg.ETU0151B010CBSMSG1LIST);
		
		return etu0151b010Msg1List;
	}
	
	/**
	 * ポートアウト受付情報一覧照会（新規申請件数）を行う。
	 * @param handle セッションハンドル
	 * @param scCall SC呼出
	 * @param param パラメーター
	 * @param dataMapKey データマップキー
	 * @param portOutStat ポートアウトステータス
	 * @return CAANMsg
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg execETU0151B020(SessionHandle handle,
									ServiceComponentRequestInvoker scCall,
									IRequestParameterReadWrite param,
									String dataMapKey,
									String portOutStat) throws Throwable
	{
		CAANMsg result = null;
		
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		Object[][] etu0151b020In =
		{
			{ETU0151B020CBSMsg.TEMPLATEID, TEMPLATE_ID_ETU0151B020},
			{ETU0151B020CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			//ANK-4685-00-00 MOD START
//			{ETU0151B020CBSMsg.KEY_PORT_OUT_UK_TRKM_YMD, nullToStr((String)ccMsg.get("key_trkm_day"))},
			{ETU0151B020CBSMsg.KEY_PORT_OUT_UK_TRKM_YMD_STA, nullToStr((String)ccMsg.get("key_trkm_day_sta"))},
			{ETU0151B020CBSMsg.KEY_PORT_OUT_UK_TRKM_YMD_END, nullToStr((String)ccMsg.get("key_trkm_day_end"))},
			//ANK-4685-00-00 MOD END
			{ETU0151B020CBSMsg.KEY_PORT_OUT_STAT, portOutStat}
		};
		
		CAANMsg etu0151b020Msg = callSC(handle, scCall, param, dataMapKey, etu0151b020In);
		
		CAANMsg[] etu0151b020Msg1List = etu0151b020Msg.getCAANMsgList(ETU0151B020CBSMsg.ETU0151B020CBSMSG1LIST);
		
		if (etu0151b020Msg1List != null && etu0151b020Msg1List.length > 0)
		{
			result = etu0151b020Msg1List[0];
		}
		
		return result;
	}
	
	/**
	 * ポートアウト受付情報一覧照会（統合オーダID）を行う。
	 * @param handle セッションハンドル
	 * @param scCall SC呼出
	 * @param param パラメーター
	 * @param dataMapKey データマップキー
	 * @param togoOdrId 統合オーダID
	 * @return CAANMsg[]
	 * @throws Throwable
	 */
	private CAANMsg[] execETU0151B030(SessionHandle handle,
									ServiceComponentRequestInvoker scCall,
									IRequestParameterReadWrite param,
									String dataMapKey,
									String togoOdrId) throws Throwable
	{
		Object[][] etu0151b030In =
		{
			{ETU0151B030CBSMsg.TEMPLATEID, TEMPLATE_ID_ETU0151B030},
			{ETU0151B030CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{ETU0151B030CBSMsg.KEY_TOGO_ODR_ID, togoOdrId}
		};
		
		CAANMsg etu0151b030Msg = callSC(handle, scCall, param, dataMapKey, etu0151b030In);
		
		CAANMsg[] etu0151b030Msg1List = etu0151b030Msg.getCAANMsgList(ETU0151B030CBSMsg.ETU0151B030CBSMSG1LIST);
		
		return etu0151b030Msg1List;
	}
	
	/**
	 * ポートアウト受付情報ステータス変更を行う。
	 * @param handle セッションハンドル
	 * @param scCall SC呼出
	 * @param param パラメーター
	 * @param dataMapKey データマップキー
	 * @param etu0151b010Msg データ情報
	 * @return CAANMsg
	 * @throws Throwable
	 */
	private CAANMsg execETU0151C030(SessionHandle handle,
									ServiceComponentRequestInvoker scCall,
									IRequestParameterReadWrite param,
									String dataMapKey,
									CAANMsg etu0151b010Msg) throws Throwable
	{
		Object[][] etu0151c030In =
		{
			{ETU0151C030CBSMsg.TEMPLATEID, TEMPLATE_ID_ETU0151C030},
			{ETU0151C030CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{ETU0151C030CBSMsg.PORT_OUT_NO, nullToStr(etu0151b010Msg.getString(ETU0151B010CBSMsg1List.PORT_OUT_NO))},
			{ETU0151C030CBSMsg.PORT_OUT_STAT, JTUStrConst.PORT_OUT_STAT_OPUTZM},
			{ETU0151C030CBSMsg.UPD_DTM_BF, nullToStr(etu0151b010Msg.getString(ETU0151B010CBSMsg1List.UPD_DTM))}
		};
		
		CAANMsg etu0151c030Msg = callSC(handle, scCall, param, dataMapKey, etu0151c030In);
		
		return etu0151c030Msg;
	}
	
	/**
	 * 電子ファイル管理登録を行う。
	 * @param handle セッションハンドル
	 * @param scCall SC呼出
	 * @param param パラメーター
	 * @param dataMapKey データマップキー
	 * @param csvData CSVデータ
	 * @param fileDelYmd ファイル削除年月日
	 * @return CAANMsg
	 * @throws Throwable
	 */
	private CAANMsg execECC0041D010(SessionHandle handle,
									ServiceComponentRequestInvoker scCall,
									IRequestParameterReadWrite param,
									String dataMapKey,
									byte[] csvData,
									String fileDelYmd) throws Throwable
	{
		Object[][] ecc0041d010In =
		{
			{ECC0041D010CBSMsg.TEMPLATEID, TEMPLATE_ID_ECC0041D010},
			{ECC0041D010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{ECC0041D010CBSMsg.SYS_CD, JTUStrConst.SYS_CD_TU},
			{ECC0041D010CBSMsg.FILE_CD, ""},
			{ECC0041D010CBSMsg.EFILE, csvData},
			{ECC0041D010CBSMsg.FILE_DEL_YMD, fileDelYmd}
		};
		
		CAANMsg ecc0041d010Msg = callSC(handle, scCall, param, dataMapKey, ecc0041d010In);
		
		return ecc0041d010Msg;
	}
	
	
	/**
	 * ダウンロードファイル管理登録を行う。
	 * @param handle セッションハンドル
	 * @param scCall SC呼出
	 * @param param パラメーター
	 * @param dataMapKey データマップキー
	 * @param ecc0041d010Msg 電子ファイル管理
	 * @param trnKanriNo 処理管理番号
	 * @param fileNm ファイル名
	 * @param dataCnt データ件数
	 * @param fileDelYmd ファイル削除年月日
	 * @return CAANMsg
	 * @throws Throwable
	 */
	private CAANMsg execEZM0261D010(SessionHandle handle,
									ServiceComponentRequestInvoker scCall,
									IRequestParameterReadWrite param,
									String dataMapKey,
									CAANMsg ecc0041d010Msg,
									String trnKanriNo,
									String fileNm,
									String dataCnt,
									String fileDelYmd) throws Throwable
	{
		// システム日付取得
		String sysDateTimeSt = JCCBPCommon.getSysDateTimeStamp();
		
		Object[][] ezm0261d010In =
		{
			{EZM0261D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EZM0261D010},
			{EZM0261D010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{EZM0261D010CBSMsg.SYORI_KANRI_NUM, trnKanriNo},
			{EZM0261D010CBSMsg.BUNSHO_KANRI_NO, ecc0041d010Msg.getString(ECC0041D010CBSMsg.EFILE_KANRI_NO)},
			{EZM0261D010CBSMsg.FILE_NM, fileNm},
			{EZM0261D010CBSMsg.SIZE, ecc0041d010Msg.getString(ECC0041D010CBSMsg.FILE_SIZE)},
			{EZM0261D010CBSMsg.DATA_CNT, dataCnt},
			{EZM0261D010CBSMsg.FILE_ADD_DTM, sysDateTimeSt},
			{EZM0261D010CBSMsg.FILE_DEL_YMD, fileDelYmd}
		};
		
		CAANMsg ezm0261d010Msg = callSC(handle, scCall, param, dataMapKey, ezm0261d010In);
		
		return ezm0261d010Msg;
	}
	
	/**
	 * 項目名がnullかチェックする
	 * <br>
	 * @param str 項目名
	 * @return 項目名
	 */
	private String nullToStr(String str)
	{
		/* 項目名がnullかチェック */
		if (str == null)
		{
			str = "";
		}
		return str;
	}
}

/**
 * 他社番ポ申請可否リストをソートします。<p>
 * <BR>
 * @author 富士通sortTasyaKekaList
 */
@SuppressWarnings("unchecked")
class JTUTshLoadZmSskkIcrnOperateCCSort1 implements Comparator
{
	@Override
	public int compare(Object o1, Object o2)
	{
		if (o1 == null && o2 == null)
		{
			return 0;
		}
		else if (o1 == null)
		{
			return 1;
		}
		else if (o2 == null)
		{
			return -1;
		}
		
		HashMap<String, Object> map1 = (HashMap<String, Object>) o1;
		HashMap<String, Object> map2 = (HashMap<String, Object>) o2;
		
		int result = 0;
		String key1 = "";
		String key2 = "";
		
		// 統合オーダID（昇順）
		key1 = nullToStr((String) map1.get("togo_odr_id"));
		key2 = nullToStr((String) map2.get("togo_odr_id"));
		result = key1.compareTo(key2);
		if (result != 0)
		{
			return result;
		}
		
		// オーダ番号（昇順）
		key1 = nullToStr((String) map1.get("bmp_order_no"));
		key2 = nullToStr((String) map2.get("bmp_order_no"));
		result = key1.compareTo(key2);
		if (result != 0)
		{
			return result;
		}
		
		// 電話番号（昇順）
		key1 = nullToStr((String) map1.get("telno"));
		key2 = nullToStr((String) map2.get("telno"));
		result = key1.compareTo(key2);
		if (result != 0)
		{
			return result;
		}
		
		return result;
	}
	
	/**
	 * 項目名がnullかチェックする
	 * <br>
	 * @param str 項目名
	 * @return 項目名
	 */
	private String nullToStr(String str)
	{
		/* 項目名がnullかチェック */
		if (str == null)
		{
			str = "";
		}
		return str;
	}
}

/**
 * 他社番ポ申請SO手配スキップをソートします。<p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("unchecked")
class JTUTshLoadZmSskkIcrnOperateCCSort2 implements Comparator
{
	@Override
	public int compare(Object o1, Object o2)
	{
		if (o1 == null && o2 == null)
		{
			return 0;
		}
		else if (o1 == null)
		{
			return 1;
		}
		else if (o2 == null)
		{
			return -1;
		}
		
		HashMap<String, Object> map1 = (HashMap<String, Object>) o1;
		HashMap<String, Object> map2 = (HashMap<String, Object>) o2;
		
		int result = 0;
		String key1 = "";
		String key2 = "";
		
		// オーダ番号（昇順）
		key1 = nullToStr((String) map1.get("bmp_order_no"));
		key2 = nullToStr((String) map2.get("bmp_order_no"));
		result = key1.compareTo(key2);
		if (result != 0)
		{
			return result;
		}
		
		return result;
	}
	
	/**
	 * 項目名がnullかチェックする
	 * <br>
	 * @param str 項目名
	 * @return 項目名
	 */
	private String nullToStr(String str)
	{
		/* 項目名がnullかチェック */
		if (str == null)
		{
			str = "";
		}
		return str;
	}
}
