/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：KKA131SFLogic
 *   ソースファイル名：KKA131SFLogic.java
 *   作成者          ：富士通
 *   日付            ：2011年12月19日
 *＜機能概要＞
 *   契約者番号及び請求先番号照会要求受付(API)のビューロジックです。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v1.00.00    2011/12/19   FJ）佐藤    新規作成
 *   v3.00.00    2012/09/03   FJ) 団      業務処理名"契約者番号及び請求先番号参照"→"契約者番号及び請求先番号照会要求受付"に修正
 *
 **********************************************************************/
package eo.web.webview.KKA131SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x00.JCCWebServiceException;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.util.JPCEditString;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKApiCommon;
import eo.web.webview.common.JKKCommonConst;
import eo.web.webview.mapping.KKSV0336_KKSV0336OPDBMapper;

/**
 * KKA131のビューロジックです。<p>
 * <BR>
 * @author 富士通
 */
public class KKA131SFLogic extends JCCWebBusinessLogic
{
	/**
	 * 業務処理名
	 */
	private static final String BUSINESS_LOGIC_NM = "契約者番号及び請求先番号照会要求受付";

	/**
	 * 契約者番号及び請求先番号照会要求受付処理です。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception エラーが発生した場合
	 */
	public boolean init() throws Exception
	{
		// サービス結果格納用サービスフォームBean
		X31SDataBeanAccess bean = null;
		StringBuffer rspMsg = new StringBuffer();

		try
		{
			// サービス結果格納用サービスフォームBean取得
			bean = getServiceFormBean();

			X31SDataBeanAccess commonBean = super.getCommonInfoBean();
			
			// ■ 業務規制チェック
			if (!JKKApiCommon.checkRequestRestriction(commonBean))
			{
				// 規制中の場合
				DEBUG_LOG.debug("■業務規制エラー");
				
				// "M" "007001"（業務規制エラー）
				Exception ex = new Exception("メンテナンス中です。");

				// 例外発生したソースコードの行番号を取得し５桁となるようにゼロ埋め
				String line_num = JPCEditString.fillZero(String.valueOf(ex.getStackTrace()[0].getLineNumber()), 5, false);

				HashMap<String, Object> errMap = new HashMap<String, Object>(8);
				errMap.put("WDA_COM_RTYPE", JKKApiCommon.getRtype("007001"));
				errMap.put("WDA_COM_RESULT", "007001");
				errMap.put("WDA_COM_DETAIL1", this.getClass().getName());
				errMap.put("WDA_COM_DETAIL2", line_num);
				errMap.put("WDA_COM_DETAIL3", BUSINESS_LOGIC_NM);
				errMap.put("WDA_COM_DETAIL4", "");
				errMap.put("WDA_COM_DETAIL5", "");
				errMap.put("WDA_COM_DETAIL6", "顧客サーバ");

				// 処理応答電文（共通セクタ）の形式に変換
				rspMsg.append(JKKApiCommon.getCommonSector(errMap));

				// 返却値の設定
				bean.sendMessageString(KKA131SFConst.RSP_MSG, X31CWebConst.DATABEAN_SET_VALUE, rspMsg.toString());
				return true;
			}

			// ■ 処理要求電文より、パラメータを取得する。
			HashMap<Object, Object> reqMap = super.getRequestParams();

			String okyaksm_id = (String)reqMap.get("OKYAKSM_ID");	// サービス契約番号
			String no_flg = (String)reqMap.get("NO_FLG");	// 番号取得判定フラグ

			// ■ 必須入力チェック
			if (JKKApiCommon.isNull(okyaksm_id))
			{
				// "E" "009008"（必須項目が未設定の場合）
				Exception ex = new Exception("必須項目が設定されていません。");

				// 例外発生したソースコードの行番号を取得し5桁となるようにゼロ埋め
				String line_num = JPCEditString.fillZero(String.valueOf(ex.getStackTrace()[0].getLineNumber()), 5, false);

				HashMap<String, Object> errMap = new HashMap<String, Object>(8);
				errMap.put("WDA_COM_RTYPE", JKKApiCommon.getRtype("009008"));
				errMap.put("WDA_COM_RESULT", "009008");
				errMap.put("WDA_COM_DETAIL1", this.getClass().getName());
				errMap.put("WDA_COM_DETAIL2", line_num);
				errMap.put("WDA_COM_DETAIL3", BUSINESS_LOGIC_NM);
				errMap.put("WDA_COM_DETAIL4", "OKYAKSM_ID");
				errMap.put("WDA_COM_DETAIL5", "");
				errMap.put("WDA_COM_DETAIL6", "");

				// 処理応答電文（共通セクタ）の形式に変換
				rspMsg.append(JKKApiCommon.getCommonSector(errMap));
				// 返却値の設定
				bean.sendMessageString(KKA131SFConst.RSP_MSG, X31CWebConst.DATABEAN_SET_VALUE, rspMsg.toString());
				return true;
			}
			if (JKKApiCommon.isNull(no_flg))
			{
				// "E" "009008"（必須項目が未設定の場合）
				Exception ex = new Exception("必須項目が設定されていません。");

				// 例外発生したソースコードの行番号を取得し5桁となるようにゼロ埋め
				String line_num = JPCEditString.fillZero(String.valueOf(ex.getStackTrace()[0].getLineNumber()), 5, false);

				HashMap<String, Object> errMap = new HashMap<String, Object>(8);
				errMap.put("WDA_COM_RTYPE", JKKApiCommon.getRtype("009008"));
				errMap.put("WDA_COM_RESULT", "009008");
				errMap.put("WDA_COM_DETAIL1", this.getClass().getName());
				errMap.put("WDA_COM_DETAIL2", line_num);
				errMap.put("WDA_COM_DETAIL3", BUSINESS_LOGIC_NM);
				errMap.put("WDA_COM_DETAIL4", "NO_FLG");
				errMap.put("WDA_COM_DETAIL5", "");
				errMap.put("WDA_COM_DETAIL6", "");

				// 処理応答電文（共通セクタ）の形式に変換
				rspMsg.append(JKKApiCommon.getCommonSector(errMap));
				// 返却値の設定
				bean.sendMessageString(KKA131SFConst.RSP_MSG, X31CWebConst.DATABEAN_SET_VALUE, rspMsg.toString());
				return true;
			}

			// ■ 最大桁数チェック(サービス契約番号が10桁を超えた場合)
			if (10 < okyaksm_id.length())
			{
				// "E" "009010"（パラメータ値の最大桁数を超えた場合）
				Exception ex = new Exception("最大桁数を超えています。");

				// 例外発生したソースコードの行番号を取得し5桁となるようにゼロ埋め
				String line_num = JPCEditString.fillZero(String.valueOf(ex.getStackTrace()[0].getLineNumber()), 5, false);

				HashMap<String, Object> errMap = new HashMap<String, Object>(8);
				errMap.put("WDA_COM_RTYPE", JKKApiCommon.getRtype("009010"));
				errMap.put("WDA_COM_RESULT", "009010");
				errMap.put("WDA_COM_DETAIL1", this.getClass().getName());
				errMap.put("WDA_COM_DETAIL2", line_num);
				errMap.put("WDA_COM_DETAIL3", BUSINESS_LOGIC_NM);
				errMap.put("WDA_COM_DETAIL4", "OKYAKSM_ID");
				errMap.put("WDA_COM_DETAIL5", "");
				errMap.put("WDA_COM_DETAIL6", okyaksm_id);

				// 処理応答電文（共通セクタ）の形式に変換
				rspMsg.append(JKKApiCommon.getCommonSector(errMap));
				// 返却値の設定
				bean.sendMessageString(KKA131SFConst.RSP_MSG, X31CWebConst.DATABEAN_SET_VALUE, rspMsg.toString());
				return true;
			}

			// ■ 最大桁数チェック(番号判定フラグが1桁を超えた場合)
			if (1 < no_flg.length())
			{
				// "E" "009010"（パラメータ値の最大桁数を超えた場合）
				Exception ex = new Exception("最大桁数を超えています。");

				// 例外発生したソースコードの行番号を取得し5桁となるようにゼロ埋め
				String line_num = JPCEditString.fillZero(String.valueOf(ex.getStackTrace()[0].getLineNumber()), 5, false);

				HashMap<String, Object> errMap = new HashMap<String, Object>(8);
				errMap.put("WDA_COM_RTYPE", JKKApiCommon.getRtype("009010"));
				errMap.put("WDA_COM_RESULT", "009010");
				errMap.put("WDA_COM_DETAIL1", this.getClass().getName());
				errMap.put("WDA_COM_DETAIL2", line_num);
				errMap.put("WDA_COM_DETAIL3", BUSINESS_LOGIC_NM);
				errMap.put("WDA_COM_DETAIL4", "NO_FLG");
				errMap.put("WDA_COM_DETAIL5", "");
				errMap.put("WDA_COM_DETAIL6", no_flg);

				// 処理応答電文（共通セクタ）の形式に変換
				rspMsg.append(JKKApiCommon.getCommonSector(errMap));
				// 返却値の設定
				bean.sendMessageString(KKA131SFConst.RSP_MSG, X31CWebConst.DATABEAN_SET_VALUE, rspMsg.toString());
				return true;
			}

			// ■ 数値属性チェック
			if (!JKKApiCommon.isNumber(no_flg))
			{
				//"E" "009009"（数値項目に数値以外が設定されている場合）
				Exception ex = new Exception("数値項目に数値以外が設定されてます。");

				// 例外発生したソースコードの行番号を取得し5桁となるようにゼロ埋め
				String line_num = JPCEditString.fillZero(String.valueOf(ex.getStackTrace()[0].getLineNumber()), 5, false);

				HashMap<String, Object> errMap = new HashMap<String, Object>(8);
				errMap.put("WDA_COM_RTYPE", JKKApiCommon.getRtype("009009"));
				errMap.put("WDA_COM_RESULT", "009009");
				errMap.put("WDA_COM_DETAIL1", this.getClass().getName());
				errMap.put("WDA_COM_DETAIL2", line_num);
				errMap.put("WDA_COM_DETAIL3", BUSINESS_LOGIC_NM);
				errMap.put("WDA_COM_DETAIL4", "NO_FLG");
				errMap.put("WDA_COM_DETAIL5", "");
				errMap.put("WDA_COM_DETAIL6", no_flg);

				// 処理応答電文（共通セクタ）の形式に変換
				rspMsg.append(JKKApiCommon.getCommonSector(errMap));
				// 返却値の設定
				bean.sendMessageString(KKA131SFConst.RSP_MSG, X31CWebConst.DATABEAN_SET_VALUE, rspMsg.toString());
				return true;
			}

			// オンライン運用日付取得
			String opeDate = JCCWebCommon.getOpeDate(this, null);

			// ■ サービス呼び出し準備
			HashMap<String, Object> paramMap = new HashMap<String, Object>(8);
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0336");

			HashMap<String, HashMap<String, Object>> inputMap = new HashMap<String, HashMap<String, Object>>();
			HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();

			KKSV0336_KKSV0336OPDBMapper mapper = new KKSV0336_KKSV0336OPDBMapper();
			mapper.setKKSV033601SC(reqMap, inputMap, JKKCommonConst.FUNC_CODE_1);
			mapper.setKKSV033602SC(reqMap, inputMap, JKKCommonConst.FUNC_CODE_2, opeDate);
			mapper.setKKSV0336WORK01(reqMap, inputMap, opeDate);

			// ■ サービス呼出
			try
			{
				invokeService(paramMap, inputMap, outputMap);
			}
			catch(JCCWebServiceException jwse)
			{
				throw jwse;
			}

			// ■ サービス結果の転記
			HashMap<String, Object> comMap = new HashMap<String, Object>(1);
			HashMap<String, Object> simpleMap = new HashMap<String, Object>(1);
			ArrayList<HashMap<String, Object>> multiList = new ArrayList<HashMap<String, Object>>();

			mapper.getKKSV0336WORK02(comMap, outputMap);
			String result_cd = (String)comMap.get("WDA_COM_RESULT");

			DEBUG_LOG.debug("■返却コード：" + result_cd);
			DEBUG_LOG.debug("■番号取得判定フラグ：" + no_flg);
			
			// サービスの処理結果が正常（返却コード"000000"）の場合
			if ("000000".equals(result_cd))
			{
				// 処理応答電文（共通セクタ）の形式に変換
				rspMsg.append(JKKApiCommon.getCommonSector(result_cd));

				//番号取得判定フラグ="0"の場合
				if("0".equals(no_flg))
				{
					mapper.getKKSV033601SC(simpleMap, multiList, outputMap);
					// 処理応答電文（シンプルセクタ）の形式に変換
					rspMsg.append(JKKApiCommon.getSimpleSector(simpleMap));

					if (multiList.size() != 0 || multiList != null) 
					{
						// 処理応答電文（マルチセクタ）の形式に変換
						rspMsg.append(JKKApiCommon.getMultipleSector(multiList, "M1"));
					}

					// 返却値の設定
					bean.sendMessageString(KKA131SFConst.RSP_MSG, X31CWebConst.DATABEAN_SET_VALUE, rspMsg.toString());
					return true;
				}

				//番号取得判定フラグ="1"の場合
				if("1".equals(no_flg))
				{
					mapper.getKKSV033602SC(simpleMap, multiList, outputMap);
					// 処理応答電文（シンプルセクタ）の形式に変換
					rspMsg.append(JKKApiCommon.getSimpleSector(simpleMap));

					if (multiList.size() != 0 || multiList != null) 
					{
						// 処理応答電文（マルチセクタ）の形式に変換
						rspMsg.append(JKKApiCommon.getMultipleSector(multiList, "M2"));
					}

					// 返却値の設定
					bean.sendMessageString(KKA131SFConst.RSP_MSG, X31CWebConst.DATABEAN_SET_VALUE, rspMsg.toString());
					return true;
				}

				//番号取得判定フラグ="2"の場合
				if("2".equals(no_flg))
				{
					mapper.getKKSV033601SC(simpleMap, multiList, outputMap);
					// 処理応答電文（シンプルセクタ）の形式に変換
					rspMsg.append(JKKApiCommon.getSimpleSector(simpleMap));

					if (multiList.size() != 0 || multiList != null) 
					{
						// 処理応答電文（マルチセクタ）の形式に変換
						rspMsg.append(JKKApiCommon.getMultipleSector(multiList, "M1"));
					}

					simpleMap = new HashMap<String, Object>(1);
					multiList = new ArrayList<HashMap<String, Object>>();

					mapper.getKKSV033602SC(simpleMap, multiList, outputMap);
					// 処理応答電文（シンプルセクタ）の形式に変換
					rspMsg.append(JKKApiCommon.getSimpleSector(simpleMap));

					if (multiList.size() != 0 || multiList != null) 
					{
						// 処理応答電文（マルチセクタ）の形式に変換
						rspMsg.append(JKKApiCommon.getMultipleSector(multiList, "M2"));
					}

					// 返却値の設定
					bean.sendMessageString(KKA131SFConst.RSP_MSG, X31CWebConst.DATABEAN_SET_VALUE, rspMsg.toString());
					return true;
				}
			//番号判定フラグ："0","1","2"以外が送信されてきた場合
			}
			else if(!("0".equals(no_flg) || "1".equals(no_flg) || "2".equals(no_flg)))
			{
				// "E" "009010"（番号判定フラグ："0","1","2"以外が送信されてきた場合）
				Exception ex = new Exception("番号判定フラグ：0,1,2以外が送信されてきた場合");

				// 例外発生したソースコードの行番号を取得し5桁となるようにゼロ埋め
				String line_num = JPCEditString.fillZero(String.valueOf(ex.getStackTrace()[0].getLineNumber()), 5, false);

				HashMap<String, Object> errMap = new HashMap<String, Object>(8);
				errMap.put("WDA_COM_RTYPE", JKKApiCommon.getRtype("009010"));
				errMap.put("WDA_COM_RESULT", "009010");
				errMap.put("WDA_COM_DETAIL1", this.getClass().getName());
				errMap.put("WDA_COM_DETAIL2", line_num);
				errMap.put("WDA_COM_DETAIL3", BUSINESS_LOGIC_NM);
				errMap.put("WDA_COM_DETAIL4", "NO_FLG");
				errMap.put("WDA_COM_DETAIL5", "");
				errMap.put("WDA_COM_DETAIL6", no_flg);

				// 処理応答電文（共通セクタ）の形式に変換
				rspMsg.append(JKKApiCommon.getCommonSector(errMap));
				// 返却値の設定
				bean.sendMessageString(KKA131SFConst.RSP_MSG, X31CWebConst.DATABEAN_SET_VALUE, rspMsg.toString());
				return true;
			}
			// 返却コード不正
			throw new Exception("処理結果コードが取得できませんでした。");
		}
		catch (Exception e)
		{
			DEBUG_LOG.debug("■致命的なエラー発生");
			
			// ■例外トレースのログ出力
			JKKApiCommon.printDebugLog(e);
			
			// 処理で致命的なエラー（返却コード"009003"）が発生した場合
			// 例外発生したソースコードの行番号を取得し5桁となるようにゼロ埋め
			String line_num = JPCEditString.fillZero(String.valueOf(e.getStackTrace()[0].getLineNumber()), 5, false);

			HashMap<String, Object> errMap = new HashMap<String, Object>(8);
			errMap.put("WDA_COM_RTYPE", JKKApiCommon.getRtype("009003"));
			errMap.put("WDA_COM_RESULT", "009003");
			errMap.put("WDA_COM_DETAIL1", this.getClass().getName());
			errMap.put("WDA_COM_DETAIL2", line_num);
			errMap.put("WDA_COM_DETAIL3", BUSINESS_LOGIC_NM);
			errMap.put("WDA_COM_DETAIL4", "");
			errMap.put("WDA_COM_DETAIL5", "");
			errMap.put("WDA_COM_DETAIL6", e.toString());

			// 処理応答電文（共通セクタ）の形式に変換
			rspMsg.append(JKKApiCommon.getCommonSector(errMap));
			// 返却値の設定
			bean.sendMessageString(KKA131SFConst.RSP_MSG, X31CWebConst.DATABEAN_SET_VALUE, rspMsg.toString());
			return true;
		}
	}
}
