/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKOtokInfoIcrnShokaiCC
*	ソースファイル名：JKKOtokInfoIcrnShokaiCC.java
*	作成者			：FJ
*	日付			：2021年05月27日
*＜機能概要＞
*	お得情報照会の共通コンポーネント
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*   v53.00.00   2021/05/27  FJ)加藤     【ANK-4047-00-00】新規作成
*   v53.01.00   2021/07/02  FJ)加藤     【OM-2021-0001020】
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
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 com.fujitsu.futurity.model.common.check.HalfCharCheck;
import com.fujitsu.futurity.model.common.check.LengthCheck;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.EKK3301B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK3301B010CBSMsg1List;

/**
 * お得情報照会の共通コンポーネントクラスです。
 * <br>
 * @author 富士通
 *
 */
public class JKKOtokInfoIcrnShokaiCC extends AbstractCommonComponent
{
	/** テンプレートID(EKK3301B010) お得情報一覧照会 */
	private static final String TEMPLATE_ID_EKK3301B010 = "EKK3301B010";
	
	/** 処理結果 */
	private static final String RESULT = "result";

	/** SYSID */
	private static final String SYSID = "SYSID";

	/** お得区分 */
	private static final String OTOKDIV = "otokuClass";

	/** 提案チャネル */
	private static final String TEIANCHANEL = "suggestionChannel";

	/** 項目1 */
	private static final String ITEM01 = "item01";

	/** 項目2 */
	private static final String ITEM02 = "item02";

	/** 項目3 */
	private static final String ITEM03 = "item03";

	/** 項目4 */
	private static final String ITEM04 = "item04";

	/** 項目5 */
	private static final String ITEM05 = "item05";

	/** 項目6 */
	private static final String ITEM06 = "item06";

	/** 項目7 */
	private static final String ITEM07 = "item07";

	/** 項目8 */
	private static final String ITEM08 = "item08";

	/** 項目9 */
	private static final String ITEM09 = "item09";

	/** 項目10 */
	private static final String ITEM10 = "item10";

	/** 項目11 */
	private static final String ITEM11 = "item11";

	/** 項目12 */
	private static final String ITEM12 = "item12";

	/** 項目13 */
	private static final String ITEM13 = "item13";

	/** 項目14 */
	private static final String ITEM14 = "item14";

	/** 項目15 */
	private static final String ITEM15 = "item15";

	/** 項目16 */
	private static final String ITEM16 = "item16";

	/** 項目17 */
	private static final String ITEM17 = "item17";

	/** 項目18 */
	private static final String ITEM18 = "item18";

	/** 項目19 */
	private static final String ITEM19 = "item19";

	/** 項目20 */
	private static final String ITEM20 = "item20";

	/** 項目21 */
	private static final String ITEM21 = "item21";

	/** 項目22 */
	private static final String ITEM22 = "item22";

	/** 項目23 */
	private static final String ITEM23 = "item23";

	/** 項目24 */
	private static final String ITEM24 = "item24";

	/** 項目25 */
	private static final String ITEM25 = "item25";

	/** 項目26 */
	private static final String ITEM26 = "item26";

	/** 項目27 */
	private static final String ITEM27 = "item27";

	/** 項目28 */
	private static final String ITEM28 = "item28";

	/** 項目29 */
	private static final String ITEM29 = "item29";

	/** 項目30 */
	private static final String ITEM30 = "item30";

	/** 項目31 */
	private static final String ITEM31 = "item31";

	/** 項目32 */
	private static final String ITEM32 = "item32";

	/** 項目33 */
	private static final String ITEM33 = "item33";

	/** 項目34 */
	private static final String ITEM34 = "item34";

	/** 項目35 */
	private static final String ITEM35 = "item35";

	/** 項目36 */
	private static final String ITEM36 = "item36";

	/** 項目37 */
	private static final String ITEM37 = "item37";

	/** 項目38 */
	private static final String ITEM38 = "item38";

	/** 項目39 */
	private static final String ITEM39 = "item39";

	/** 項目40 */
	private static final String ITEM40 = "item40";

	/** 項目41 */
	private static final String ITEM41 = "item41";

	/** 項目42 */
	private static final String ITEM42 = "item42";

	/** 項目43 */
	private static final String ITEM43 = "item43";

	/** 項目44 */
	private static final String ITEM44 = "item44";

	/** 項目45 */
	private static final String ITEM45 = "item45";

	/** 項目46 */
	private static final String ITEM46 = "item46";

	/** 項目47 */
	private static final String ITEM47 = "item47";

	/** 項目48 */
	private static final String ITEM48 = "item48";

	/** 項目49 */
	private static final String ITEM49 = "item49";

	/** 項目50 */
	private static final String ITEM50 = "item50";

	/** 項目51 */
	private static final String ITEM51 = "item51";

	/** 項目52 */
	private static final String ITEM52 = "item52";

	/** 項目53 */
	private static final String ITEM53 = "item53";

	/** 項目54 */
	private static final String ITEM54 = "item54";

	/** 項目55 */
	private static final String ITEM55 = "item55";

	/** 項目56 */
	private static final String ITEM56 = "item56";

	/** 項目57 */
	private static final String ITEM57 = "item57";

	/** 項目58 */
	private static final String ITEM58 = "item58";

	/** 項目59 */
	private static final String ITEM59 = "item59";

	/** 項目60 */
	private static final String ITEM60 = "item60";

	/** 項目61 */
	private static final String ITEM61 = "item61";

	/** 項目62 */
	private static final String ITEM62 = "item62";

	/** 項目63 */
	private static final String ITEM63 = "item63";

	/** 項目64 */
	private static final String ITEM64 = "item64";

	/** 項目65 */
	private static final String ITEM65 = "item65";

	/** 項目66 */
	private static final String ITEM66 = "item66";

	/** 項目67 */
	private static final String ITEM67 = "item67";

	/** 項目68 */
	private static final String ITEM68 = "item68";

	/** 項目69 */
	private static final String ITEM69 = "item69";

	/** 項目70 */
	private static final String ITEM70 = "item70";

	/** 項目71 */
	private static final String ITEM71 = "item71";

	/** 項目72 */
	private static final String ITEM72 = "item72";

	/** 項目73 */
	private static final String ITEM73 = "item73";

	/** 項目74 */
	private static final String ITEM74 = "item74";

	/** 項目75 */
	private static final String ITEM75 = "item75";

	/** 項目76 */
	private static final String ITEM76 = "item76";

	/** 項目77 */
	private static final String ITEM77 = "item77";

	/** 項目78 */
	private static final String ITEM78 = "item78";

	/** 項目79 */
	private static final String ITEM79 = "item79";

	/** 項目80 */
	private static final String ITEM80 = "item80";

	/** 項目81 */
	private static final String ITEM81 = "item81";

	/** 項目82 */
	private static final String ITEM82 = "item82";

	/** 項目83 */
	private static final String ITEM83 = "item83";

	/** 項目84 */
	private static final String ITEM84 = "item84";

	/** 項目85 */
	private static final String ITEM85 = "item85";

	/** 項目86 */
	private static final String ITEM86 = "item86";

	/** 項目87 */
	private static final String ITEM87 = "item87";

	/** 項目88 */
	private static final String ITEM88 = "item88";

	/** 項目89 */
	private static final String ITEM89 = "item89";

	/** 項目90 */
	private static final String ITEM90 = "item90";

	/** 項目91 */
	private static final String ITEM91 = "item91";

	/** 項目92 */
	private static final String ITEM92 = "item92";

	/** 項目93 */
	private static final String ITEM93 = "item93";

	/** 項目94 */
	private static final String ITEM94 = "item94";

	/** 項目95 */
	private static final String ITEM95 = "item95";

	/** 項目96 */
	private static final String ITEM96 = "item96";

	/** 項目97 */
	private static final String ITEM97 = "item97";

	/** 項目98 */
	private static final String ITEM98 = "item98";

	/** 項目99 */
	private static final String ITEM99 = "item99";

	/** お得リスト */
	private static final String OTOKLIST = "otokuList";
	
	/** CCパラメータ：エラー情報 */
	private static final String ERROR_INFO = "ERROR_INFO";

	/** CCパラメータ：エラーコード */
	private static final String ERROR_CODE = "errCode";

	/** CCパラメータ：エラーメッセージ */
	private static final String ERROR_MESSAGE = "errMessage";

	/** 処理結果(0:正常終了) */
	private static final String RESULT_OK = "0";

	/**
	 * お得情報の取得を行う。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws Throwable 例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite getOtokInfoIcrnShokai(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	throws Throwable
	{
		// お得情報照会CCマップ
		Map<String, Object> ccMsg = (Map<String, Object>)param.getData(fixedText);
		// お得情報レスポンス
		Map<String, Object> responseMsg = new HashMap<String, Object>();

		try
		{
			// 単項目チェック
			if (!checkUnitParam(ccMsg))
			{
				param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_5000);
				param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);
				return param;
			}

			// SYSID
			String sysid = (String)ccMsg.get(SYSID);

			// 見込顧客一意照会の上りマッピング
			Object[][] EKK3301B010In =
			{
				{EKK3301B010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK3301B010},
				{EKK3301B010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
				{EKK3301B010CBSMsg.KEY_SYSID, sysid}
			};

			// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
			ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

			// サービスIF実行
			CAANMsg EKK3301B010Msg = callSC(handle, scCall, param, fixedText, EKK3301B010In, new EKK3301B010CBSMsg().getContents());

			// お得情報一意照会明細
			CAANMsg[] EKK3301B010Msg1List = EKK3301B010Msg.getCAANMsgList(EKK3301B010CBSMsg.EKK3301B010CBSMSG1LIST);

			// サービスIF実行結果チェック
			if (!checkResult(param, ccMsg, EKK3301B010Msg1List))
			{
				return param;
			}
			else
			{
				// 実行結果セット
				// 処理結果 
				responseMsg.put(RESULT, RESULT_OK);

				// お得リスト
				List<Map<String, String>> otokuList = new ArrayList<Map<String, String>>();

				for (int i = 0; i < EKK3301B010Msg1List.length; i++)
				{
					// お得情報マップ
					Map<String, String> otokuMap = new HashMap<String, String>();
					
					// お得区分
					otokuMap.put(OTOKDIV, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.OTOK_DIV)));

					// 提案チャネル
					otokuMap.put(TEIANCHANEL, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.TEIAN_CHANNEL)));

					// 項目1
					otokuMap.put(ITEM01, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM01)));

					// 項目2
					otokuMap.put(ITEM02, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM02)));

					// 項目3
					otokuMap.put(ITEM03, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM03)));

					// 項目4
					otokuMap.put(ITEM04, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM04)));

					// 項目5
					otokuMap.put(ITEM05, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM05)));

					// 項目6
					otokuMap.put(ITEM06, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM06)));

					// 項目7
					otokuMap.put(ITEM07, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM07)));

					// 項目8
					otokuMap.put(ITEM08, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM08)));

					// 項目9
					otokuMap.put(ITEM09, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM09)));

					// 項目10
					otokuMap.put(ITEM10, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM10)));

					// 項目11
					otokuMap.put(ITEM11, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM11)));

					// 項目12
					otokuMap.put(ITEM12, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM12)));

					// 項目13
					otokuMap.put(ITEM13, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM13)));

					// 項目14
					otokuMap.put(ITEM14, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM14)));

					// 項目15
					otokuMap.put(ITEM15, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM15)));

					// 項目16
					otokuMap.put(ITEM16, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM16)));

					// 項目17
					otokuMap.put(ITEM17, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM17)));

					// 項目18
					otokuMap.put(ITEM18, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM18)));

					// 項目19
					otokuMap.put(ITEM19, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM19)));

					// 項目20
					otokuMap.put(ITEM20, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM20)));

					// 項目21
					otokuMap.put(ITEM21, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM21)));

					// 項目22
					otokuMap.put(ITEM22, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM22)));

					// 項目23
					otokuMap.put(ITEM23, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM23)));

					// 項目24
					otokuMap.put(ITEM24, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM24)));

					// 項目25
					otokuMap.put(ITEM25, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM25)));

					// 項目26
					otokuMap.put(ITEM26, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM26)));

					// 項目27
					otokuMap.put(ITEM27, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM27)));

					// 項目28
					otokuMap.put(ITEM28, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM28)));

					// 項目29
					otokuMap.put(ITEM29, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM29)));

					// 項目30
					otokuMap.put(ITEM30, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM30)));

					// 項目31
					otokuMap.put(ITEM31, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM31)));

					// 項目32
					otokuMap.put(ITEM32, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM32)));

					// 項目33
					otokuMap.put(ITEM33, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM33)));

					// 項目34
					otokuMap.put(ITEM34, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM34)));

					// 項目35
					otokuMap.put(ITEM35, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM35)));

					// 項目36
					otokuMap.put(ITEM36, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM36)));

					// 項目37
					otokuMap.put(ITEM37, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM37)));

					// 項目38
					otokuMap.put(ITEM38, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM38)));

					// 項目39
					otokuMap.put(ITEM39, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM39)));

					// 項目40
					otokuMap.put(ITEM40, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM40)));

					// 項目41
					otokuMap.put(ITEM41, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM41)));

					// 項目42
					otokuMap.put(ITEM42, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM42)));

					// 項目43
					otokuMap.put(ITEM43, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM43)));

					// 項目44
					otokuMap.put(ITEM44, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM44)));

					// 項目45
					otokuMap.put(ITEM45, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM45)));

					// 項目46
					otokuMap.put(ITEM46, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM46)));

					// 項目47
					otokuMap.put(ITEM47, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM47)));

					// 項目48
					otokuMap.put(ITEM48, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM48)));

					// 項目49
					otokuMap.put(ITEM49, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM49)));

					// 項目50
					otokuMap.put(ITEM50, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM50)));

					// 項目51
					otokuMap.put(ITEM51, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM51)));

					// 項目52
					otokuMap.put(ITEM52, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM52)));

					// 項目53
					otokuMap.put(ITEM53, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM53)));

					// 項目54
					otokuMap.put(ITEM54, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM54)));

					// 項目55
					otokuMap.put(ITEM55, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM55)));

					// 項目56
					otokuMap.put(ITEM56, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM56)));

					// 項目57
					otokuMap.put(ITEM57, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM57)));

					// 項目58
					otokuMap.put(ITEM58, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM58)));

					// 項目59
					otokuMap.put(ITEM59, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM59)));

					// 項目60
					otokuMap.put(ITEM60, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM60)));

					// 項目61
					otokuMap.put(ITEM61, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM61)));

					// 項目62
					otokuMap.put(ITEM62, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM62)));

					// 項目63
					otokuMap.put(ITEM63, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM63)));

					// 項目64
					otokuMap.put(ITEM64, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM64)));

					// 項目65
					otokuMap.put(ITEM65, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM65)));

					// 項目66
					otokuMap.put(ITEM66, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM66)));

					// 項目67
					otokuMap.put(ITEM67, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM67)));

					// 項目68
					otokuMap.put(ITEM68, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM68)));

					// 項目69
					otokuMap.put(ITEM69, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM69)));

					// 項目70
					otokuMap.put(ITEM70, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM70)));

					// 項目71
					otokuMap.put(ITEM71, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM71)));

					// 項目72
					otokuMap.put(ITEM72, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM72)));

					// 項目73
					otokuMap.put(ITEM73, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM73)));

					// 項目74
					otokuMap.put(ITEM74, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM74)));

					// 項目75
					otokuMap.put(ITEM75, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM75)));

					// 項目76
					otokuMap.put(ITEM76, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM76)));

					// 項目77
					otokuMap.put(ITEM77, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM77)));

					// 項目78
					otokuMap.put(ITEM78, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM78)));

					// 項目79
					otokuMap.put(ITEM79, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM79)));

					// 項目80
					otokuMap.put(ITEM80, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM80)));

					// 項目81
					otokuMap.put(ITEM81, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM81)));

					// 項目82
					otokuMap.put(ITEM82, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM82)));

					// 項目83
					otokuMap.put(ITEM83, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM83)));

					// 項目84
					otokuMap.put(ITEM84, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM84)));

					// 項目85
					otokuMap.put(ITEM85, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM85)));

					// 項目86
					otokuMap.put(ITEM86, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM86)));

					// 項目87
					otokuMap.put(ITEM87, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM87)));

					// 項目88
					otokuMap.put(ITEM88, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM88)));

					// 項目89
					otokuMap.put(ITEM89, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM89)));

					// 項目90
					otokuMap.put(ITEM90, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM90)));

					// 項目91
					otokuMap.put(ITEM91, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM91)));

					// 項目92
					otokuMap.put(ITEM92, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM92)));

					// 項目93
					otokuMap.put(ITEM93, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM93)));

					// 項目94
					otokuMap.put(ITEM94, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM94)));

					// 項目95
					otokuMap.put(ITEM95, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM95)));

					// 項目96
					otokuMap.put(ITEM96, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM96)));

					// 項目97
					otokuMap.put(ITEM97, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM97)));

					// 項目98
					otokuMap.put(ITEM98, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM98)));

					// 項目99
					otokuMap.put(ITEM99, nullToStr(EKK3301B010Msg1List[i].getString(EKK3301B010CBSMsg1List.ITEM99)));
					
					otokuList.add(otokuMap);
				}
				responseMsg.put(SYSID, sysid);
				responseMsg.put(OTOKLIST, otokuList);
			}
			// レスポンス返却
			param.setData(fixedText, responseMsg);
			// 正常終了
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_0000);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);
		}
		// サービスインターフェース呼び出しでエラーが発生した場合
		catch (SCCallException scCallEx)
		{
			// システムエラーを設定する
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_9000);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, JKKStrConst.RETURN_MESSAGE_SYSTEM_ERROR);
		}
		return param;
	}

	/**
	 * サービスインターファイス実行結果チェック
	 * @param param
	 * @param ccMsg
	 * @param EKK3301B010MsgList
	 * @return チェックの判定
	 * @throws Exception
	 */
	private boolean checkResult(IRequestParameterReadWrite param, Map<String, Object> ccMsg, CAANMsg[] EKK3301B010Msg1List)
	throws Exception
	{
		// 取得件数が0件の場合、業務エラーを設定する
		if (EKK3301B010Msg1List == null || EKK3301B010Msg1List.length == 0)
		{
			// エラーリスト
			List<Map<String, String>> errList = new ArrayList<Map<String, String>>();

			Map<String, String> returnMap = new HashMap<String, String>();

			// 業務エラー設定
			returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_2001);
			returnMap.put(ERROR_MESSAGE, "");
			errList.add(returnMap);
			ccMsg.put(ERROR_INFO, errList);

			param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_5000);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);
			return false;
		}
		return true;
	}

	/**
	 * 項目名がnullかチェックする
	 * @param str 項目名
	 * @return 項目名
	 */
	private String nullToStr(String str)
	{
		if(str == null)
		{
			str = "";
		}
		return str;
	}


	/**
	 * 単項目チェック
	 * @param ccMsg
	 * @return チェックの判定
	 * @throws Exception
	 */
	private boolean checkUnitParam(Map<String, Object> ccMsg)
	throws Exception
	{
		// エラーリスト
		List<Map<String, String>> errList = new ArrayList<Map<String, String>>();

		String itemName = null;
		String itemValue = null;

		// SYSID
		itemName = SYSID;
		itemValue = (String)ccMsg.get(itemName);
		// 必須チェック
		if ( itemValue == null || "".equals(itemValue) )
		{
			// 必須チェックエラー
			errList.add(getReqErrInfMap(itemName));
		}
		// OM-2021-0001020 2021/07/02 MOD START
//		else if (!HalfCharCheck.isNumber1Check(itemValue))
		else if (!HalfCharCheck.isEnNumber1Check(itemValue))
		// OM-2021-0001020 2021/07/02 MOD END
		{
			// 属性チェックエラー
			errList.add(getFormErrInfMap(itemName, itemValue));
		}
		else if (!LengthCheck.isLength1Check(itemValue, 10))
		{
			// 桁数チェックエラー
			errList.add(getLenErrInfMap(itemName, itemValue));
		}

		// エラーが存在する場合
		if (errList.size() > 0)
		{
			ccMsg.put(ERROR_INFO, errList);
			return false;
		}

		return true;
	}

	/**
	 * SC(サービスインターフェイス）を呼び出す。
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param dataMapKey パラメータキー
	 * @param mappingData マッピングデータ
	 * @param contents CAANMsgのコンテンツ
	 * @return CAANMsg
	 * @throws Throwable 例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSC(SessionHandle handle, ServiceComponentRequestInvoker scCall, IRequestParameterReadWrite param, String dataMapKey,
			Object[][] mappingData, Object[][] contents)
	throws Throwable
	{
		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);

		editErrorInfoCom(param, templates, (Integer)return_code, dataMapKey, mappingData, contents);

		// エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);

		if (null == errList)
		{
			errList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));

		// SCCallExceptionはスローしない

		return msg;
	}

	/**
	 * 共通項目のメッセージを作成します。
	 * @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++)
		{
			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 CAANMsgクラス
	 * @param returnCode リターンコード
	 * @param dataMapKey パラメータキー
	 * @param mappingData マッピングデータ
	 * @param contents CAANMsgのコンテンツ
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException リクエストパラメータの操作でエラーが発生した場合
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoCom(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, String dataMapKey,
			Object[][] mappingData, Object[][] contents)
	throws RequestParameterException
	{
		CAANMsg template = templates[0];

		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);

		if (0 != returnCode)
		{
			templateStatus = 9000;
		}

		if (null == JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)))
		{
			templateStatus = 0;
		}

		int bpStatus = 0;

		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);

		if (null == obj)
		{
			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);
		}

		Map<String, String> inMap = null;
		
		// ユーザデータ情報
		inMap = (Map<String, String>)param.getData(dataMapKey);

		for (int i = 0; null != contents && i < contents.length ; i++)
		{
			String itemNm = (String)contents[i][0];
			if (itemNm.endsWith("_err"))
			{
				String errCd = (String)template.getString(itemNm);
				if (!JKKStringUtil.isNullBlank(errCd))
				{
					inMap.put(itemNm, errCd);
				}
			}
		}
		return param;
	}
	

	/**
	 * 単項目チェックの必須エラーマップ作成メソッドです。
	 * 
	 * @param itemName 項目名
	 * @return
	 */
	private Map<String, String> getReqErrInfMap(String itemName)
	{
		Map<String, String> returnMap = new HashMap<String, String>();

		returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_1001);
		returnMap.put(ERROR_MESSAGE, itemName + JKKStrConst.COLON);

		return returnMap;
	}

	/**
	 * 単項目チェックの属性エラーマップ作成メソッドです。
	 * 
	 * @param itemName 項目名
	 * @param itemValue 項目値
	 * @return
	 */
	private Map<String, String> getFormErrInfMap(String itemName, String itemValue)
	{
		Map<String, String> returnMap = new HashMap<String, String>();

		returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_1002);
		returnMap.put(ERROR_MESSAGE, itemName + JKKStrConst.COLON + itemValue);

		return returnMap;
	}
	
	/**
	 * 単項目チェックの桁数エラーマップ作成メソッドです。
	 * 
	 * @param itemName 項目名
	 * @param itemValue 項目値
	 * @return
	 */
	private Map<String, String> getLenErrInfMap(String itemName, String itemValue)
	{
		Map<String, String> returnMap = new HashMap<String, String>();
		
		returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_1003);
		returnMap.put(ERROR_MESSAGE, itemName + JKKStrConst.COLON + itemValue);

		return returnMap;
	}

}