/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKSmsHaisinRsltUpdCC
*   ソースファイル名：JKKSmsHaisinRsltUpdCC.java
*   作成者          ：FJ
*   日付            ：2021年07月29日
*＜機能概要＞
*   SMS配信結果更新コモンコンポーネント部品
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*	v54.00.00   2021/07/29  FJ)西窪     ANK-4092-00-00 CX戦略WG方針対応STEP2
*	v54.01.00   2021/08/18  FJ)西窪     ANK-4092-08-00 CX戦略WG方針対応STEP2 (対応記録画面からのＳＭＳ送信挙動の変更)
*	v54.02.00   2021/08/24  FJ)西窪     ANK-4092-14-00 CX戦略WG方針対応STEP2 (SMS配信結果受信ＩＦの連携方式変更)
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
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.common.JCCSuperComExecUtil;
import com.fujitsu.futurity.common.JCCSyslogFormat;
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.JCRStrConst;
import eo.common.constant.JFUStrConst;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.ECC0111D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK3351A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK3351A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK3351C010CBSMsg;
import eo.common.util.JKKStringUtil;
import eo.common.util.JPCFomatString;

public class JKKSmsHaisinRsltUpdCC extends AbstractCommonComponent
{
	private static final String TEMPLATE_ID_EKK3351A010 = "EKK3351A010";
	
	private static final String TEMPLATE_ID_EKK3351C010 = "EKK3351C010";
	
	// ANK-4092-08-00 ADD START
	private static final String TEMPLATE_ID_ECC0111D010 = "ECC0111D010";
	// ANK-4092-08-00 ADD END
	
	/** 配信結果OK */
	private static final String DELIVERYSTATUS_OK = "OK";
	/** 配信結果NG */
	private static final String DELIVERYSTATUS_NG = "NG";
	/** ミリ秒(.000) */
	private static final String MILLISECOND = ".000";
	
	// ANK-4092-08-00 ADD START
	/** 送信元キー情報種別コード(対応記録番号) */
	private static final String SBT_CD_TAIO_KIROK_NO = "2";
	/** 依頼JOBID */
	private static final String REQ_JOB_ID_EO90Z0110J0 = "EO90Z0110J0";
	/** ディレイド処理依頼種別コード 00000 */
	private static final String DLYD_TRN_REQ_SBT_CD_00000 = "00000";
	/** ファイル削除年月日 20991231 */
	private static final String FILE_DEL_YMD_20991231 = "20991231";
	/**  改行コード：CRLF */
	public static final String KAIGYO_CD = "\r\n";
	/**  カンマ区切り */
	private static final String CONMA = ",";
	/**  DOUBLE_QUOT */
	private static final String DOUBLE_QUOT = "\"";
	/** Unicode変換テーブル(MS932⇒EUC/Shift-JIS)*/
	private static final char[][] UNI_CONV_2 = {
		{ 0x2015, 0x2014 },
		{ 0x2225, 0x2016 },
		{ 0xff0d, 0x2212 },
		{ 0xff5e, 0x301c },
		{ 0xffe0, 0x00a2 },
		{ 0xffe1, 0x00a3 },
		{ 0xffe2, 0x00ac },
	};
	// ANK-4092-08-00 ADD END
	
	// ANK-4092-14-00 ADD START
	/** エラー情報 */
	private static final String ERROR_INFO = "ERROR_INFO";
	/** エラーコード */
	private static final String ERROR_CODE = "errCode";
	/** エラーメッセージ */
	private static final String ERROR_MESSAGE = "errMessage";
	/** 空白 */
	private static final String EMPTY = "";
	
	// メッセージID
	private static final String MESSAGE_ID = "messageId";
	// 電話番号
	private static final String ADDRESS = "address";
	// 配信結果
	private static final String DELIVERY_STATUS = "deliveryStatus";
	// 配信結果通知時刻
	private static final String NOFITY_TIME = "notifyTime";
	
	/** CCパラメータ：ボディ情報 */
	private static final String BODY_INFO = "BODY_INFO";

	// ANK-4092-14-00 ADD END




	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite execute(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable 
	{
		// ==============================================================================================================
		// ■ INPUTデータ
		// ==============================================================================================================

		// ユーザデータ取得
		Map<String, Object> ccMsg = (Map<String, Object>) param.getData(fixedText);
		
		
		// ANK-4092-14-00 ADD START
		ccMsg.put(BODY_INFO, new HashMap<String, Object>());
		
		// 単項目チェック（エラーが発生した場合、エラーリストに返却値が登録される。）
		List<Map<String, String>> errList = getErrOfUnitParam(handle, param, fixedText, ccMsg);
		if (errList.size() > 0) 
		{
			ccMsg.put(ERROR_INFO, errList);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_5000);
			return param;
		}
		// ANK-4092-14-00 ADD END

		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// ===========================================================================
		// SMS配信結果情報の取得。
		// ===========================================================================
		// 「EKK3351A010 SMS配信結果一意照会」で検索し、SMS配信結果情報を取得する。
		// 上りマッピング
		Object[][] ekk3351a010In = {
				{ EKK3351A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK3351A010 },
				{ EKK3351A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1 },
				{ EKK3351A010CBSMsg.KEY_MSG_ID, (String) ccMsg.get("messageId") } };
				
		// サービスIF実行
		CAANMsg ekk3351a010Msg = callSC(handle, scCall, param, fixedText, ekk3351a010In, new EKK3351A010CBSMsg().getContents());
				
		// SMS配信結果一意照会明細
		CAANMsg[] ekk3351a010Msg1List = ekk3351a010Msg.getCAANMsgList(EKK3351A010CBSMsg.EKK3351A010CBSMSG1LIST);
				
		// サービスIF実行結果チェック
		if (ekk3351a010Msg1List == null || ekk3351a010Msg1List.length == 0) {
			
			// ANK-4092-14-00 MOD START
//			ccMsg.put("errorCode", "99999");
			Map<String, String> returnMap = new HashMap<String, String>();
			
			returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_1101);
			returnMap.put(ERROR_MESSAGE, EMPTY);
			
			errList.add(returnMap);
			
			ccMsg.put(ERROR_INFO, errList);
			
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_5000);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);
			// ANK-4092-14-00 MOD END
			return param;
		}
		
		
		// ===========================================================================
		// SMS配信結果の更新。
		// ===========================================================================
		// 「EKK3351C010 SMS配信結果更新」にてSMS配信結果情報の更新を行う。
		
		// メッセージID
		String msgId = ekk3351a010Msg1List[0].getString(EKK3351A010CBSMsg1List.MSG_ID);
		// 送信先電話番号
		String sendsTelno = ekk3351a010Msg1List[0].getString(EKK3351A010CBSMsg1List.SENDS_TELNO);
		// 送信元キー情報
		String sendmKeyInf = ekk3351a010Msg1List[0].getString(EKK3351A010CBSMsg1List.SENDM_KEY_INF);
		// 送信元キー情報種別コード
		String sendmKeyInfSbtCd = ekk3351a010Msg1List[0].getString(EKK3351A010CBSMsg1List.SENDM_KEY_INF_SBT_CD);
		// 送信依頼年月日時分秒
		String sendReqDtm = ekk3351a010Msg1List[0].getString(EKK3351A010CBSMsg1List.SEND_REQ_DTM);
		// 配信結果コード
		String deliveryStatus = "";
		if(DELIVERYSTATUS_OK.equals(ccMsg.get("deliveryStatus")))
		{
			deliveryStatus = "0";
		}
		else if(DELIVERYSTATUS_NG.equals(ccMsg.get("deliveryStatus")))
		{
			deliveryStatus = "1";
		}
		// 配信失敗理由
		String description = (String) ccMsg.get("description");
		// SMS分割数
		String numOfSep =  (String) ccMsg.get("numOfSep");
		// 配信結果通知年月日時分秒
		// 「notifyTime」にミリ秒を付与し、形式を「yyyy/MM/dd HH:mm:ss.SSS」→「yyyyMMddHHmmssSSS」に編集
		String notifyTimeSSS = JKKStringUtil.nullToBlank((String)ccMsg.get("notifyTime")) + MILLISECOND;
		String notifyTime = JPCFomatString.formatDatetimeSSSReverse(notifyTimeSSS);
		
		// 上りマッピング
		Object[][] ekk3351c010In = {
				{ EKK3351C010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK3351C010 },
				{ EKK3351C010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1 },
				{ EKK3351C010CBSMsg.MSG_ID, msgId },
				{ EKK3351C010CBSMsg.SENDS_TELNO, sendsTelno },
				{ EKK3351C010CBSMsg.SENDM_KEY_INF, sendmKeyInf },
				{ EKK3351C010CBSMsg.SENDM_KEY_INF_SBT_CD, sendmKeyInfSbtCd },
				{ EKK3351C010CBSMsg.HAISIN_RSLT_CD, deliveryStatus },
				{ EKK3351C010CBSMsg.HAISIN_FAIL_RSN, description },
				{ EKK3351C010CBSMsg.SMS_BNKT_NUM, numOfSep },
				{ EKK3351C010CBSMsg.SEND_REQ_DTM, sendReqDtm },
				{ EKK3351C010CBSMsg.HAISIN_RSLT_TCHI_DTM, notifyTime } };
				
		// サービスIF実行
		callSC(handle, scCall, param, fixedText, ekk3351c010In, new EKK3351C010CBSMsg().getContents());
		
		// ANK-4092-14-00 ADD START
		if("99998".equals(ccMsg.get("errorCode")))
		{
			Map<String, String> returnMap = new HashMap<String, String>();
			
			returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_1102);
			returnMap.put(ERROR_MESSAGE, EMPTY);
			
			errList.add(returnMap);
			
			ccMsg.put(ERROR_INFO, errList);

			param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_5000);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);
			return param;
		}
		// ANK-4092-14-00 ADD END
		
		
		// ANK-4092-08-00 ADD START
		
		// ===========================================================================
		// ディレイド処理依頼登録
		// ===========================================================================
		// 「ECC0111D010 ディレイド処理依頼登録」にてディレイド処理依頼の登録を行う。
		
		if(!ccMsg.containsKey("errorCode"))
		{
			// 送信元キー情報種別コードが"2"(対応記録番号)の場合は、SMS配信結果対応記録更新をディレイド処理実行する。
			if(SBT_CD_TAIO_KIROK_NO.equals(sendmKeyInfSbtCd))
			{
				// ディレイド処理依頼の上りマッピング
				Object[][] ecc0111d010 =
				{
					{ECC0111D010CBSMsg.TEMPLATEID, TEMPLATE_ID_ECC0111D010},
					{ECC0111D010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
					{ECC0111D010CBSMsg.REQ_JOB_ID, REQ_JOB_ID_EO90Z0110J0},
					{ECC0111D010CBSMsg.DLYD_TRN_REQ_SBT_CD, DLYD_TRN_REQ_SBT_CD_00000},
					{ECC0111D010CBSMsg.EFILE, editMetaFile(sendmKeyInf,msgId,deliveryStatus)},
					{ECC0111D010CBSMsg.FILE_DEL_YMD, FILE_DEL_YMD_20991231}
				};
				
				// サービスIF実行
				callSC(handle, scCall, param, fixedText, ecc0111d010, new ECC0111D010CBSMsg().getContents());
				
				// ANK-4092-14-00 ADD START
				if("99997".equals(ccMsg.get("errorCode")))
				{
					Map<String, String> returnMap = new HashMap<String, String>();
					
					returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_1103);
					returnMap.put(ERROR_MESSAGE, EMPTY);
					
					errList.add(returnMap);
					
					ccMsg.put(ERROR_INFO, errList);

					param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_5000);
					param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);
					return param;
				}
				// ANK-4092-14-00 ADD END
			}
		}
		// ANK-4092-08-00 ADD END
		
		// ANK-4092-14-00 ADD START
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_0000);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);
		// ANK-4092-14-00 ADD END
		
		return param;
	}
	
	/**
	 * サービスIF呼出処理
	 * 
	 * @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];

		// リターンコード取得
		int return_code = (Integer) result.get(JCMConstants.RET_CD_INT_KEY);
		int status = msg.getInt(JCMConstants.STATUS_INT_KEY);

		editErrorInfoCom(param, templates, return_code, dataMapKey,
				mappingData, contents);

		// エラー情報のマップを取得
		ArrayList<Object> errorList = (ArrayList<Object>) param
				.getControlMapData(SCControlMapKeys.ERROR_INFO);

		if (null == errorList) {
			errorList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil
				.getErrorInfo(result, errorList));

		// SMS配信結果更新が正常に行われなかった場合、エラーコードを設定する。
		if(TEMPLATE_ID_EKK3351C010.equals(msg.getString("templateID")))
		{
			if (JPCModelConstant.NORMAL_END < return_code || JPCModelConstant.WARNING < status) {
				// エラーコードを設定する。
				Map<String, Object> ccMsg = (Map<String, Object>) param.getData(dataMapKey);
				ccMsg.put("errorCode", "99998");
			}
		}
		// ANK-4092-08-00 ADD START
		// ディレイド処理依頼登録が正常に行われなかった場合、エラーコードを設定する。
		else if(TEMPLATE_ID_ECC0111D010.equals(msg.getString("templateID")))
		{
			if (JPCModelConstant.NORMAL_END < return_code || JPCModelConstant.WARNING < status) 
			{
				// エラーコードを設定する。
				Map<String, Object> ccMsg = (Map<String, Object>) param.getData(dataMapKey);
				ccMsg.put("errorCode", "99997");
			}
		}
		// ANK-4092-08-00 ADD END

		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 (JFUStrConst.EMPTY.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 = template.getString(itemNm);
				if (!JFUBPCommon.isNull(errCd)) {
					inMap.put(itemNm, errCd);
				}
			}
		}
		return param;
	}
	
	
	// ANK-4092-08-00 ADD START
	/**
	 * ファイル生成処理<br>
	 * <br>
	 * @param mskmNo 申込番号
	 * @param contSvcCd コンテンツサービスコード
	 * @throws Throwable 例外が発生した場合
	 */
	private byte[] editMetaFile(String msgId, String deliveryStatus, String sendmKeyInf)
	throws Throwable
	{
		try
		{
			byte[] fileByte = new byte[0];

			StringBuffer sb = new StringBuffer();
			
			sb.append(DOUBLE_QUOT + replaceKaigyo(JKKStringUtil.nullToBlank(msgId)) + DOUBLE_QUOT ) 				// 
			  .append(CONMA + DOUBLE_QUOT + replaceKaigyo(JKKStringUtil.nullToBlank(deliveryStatus) + DOUBLE_QUOT ))// 
			  .append(CONMA + DOUBLE_QUOT + replaceKaigyo(JKKStringUtil.nullToBlank(sendmKeyInf) + DOUBLE_QUOT )); 	// 
			
			// 改行
			sb.append(JCRStrConst.KAIGYO_CD);
			
			// 文字コード変換
			String txtData = charConverter(sb.toString(), "Shift-JIS");

			fileByte = txtData.getBytes("Shift_JIS");

			return fileByte;
		}
		catch (UnsupportedEncodingException e)
		{
			return null;
		}
	}
 	/**
	 * 文字列内の改行コード変換メソッドです。
	 * 
	 * @param string1 判定対象文字列
	 * @return string2 返却対象文字列
	 */
	public static String replaceKaigyo(String string1)
	{
		String string2 = "";
		// 改行コードがCRLFの場合
		if ( string1.contains(JCRStrConst.KAIGYO_CD))
		{
			string2 = string1;
		}
		// 改行コードがLFの場合、CRLFに変換する
		else if (string1.contains(JCRStrConst.KAIGYO_CD_LF))
		{
			string2 = string1.replaceAll(JCRStrConst.KAIGYO_CD_LF, JCRStrConst.KAIGYO_CD);
		}
		// 改行コードが存在しない場合
		else
		{
			string2 = string1;
		}
		
		return string2;
	}
	/**
	 * 文字コードの変換を行います。<br>
	 * Unicodeコードポイントの強制変換します。
	 * <br>
	 * @param value コード変換対象の文字列
	 * @param charCode 出力する文字コードを「Shift-JIS」で指定する。<br>
	 * 
	 * @return 変換後の文字列
	 */
	private String charConverter(String value, String charCode)
	{
			return changeUnicode(value, UNI_CONV_2);
	}
	/**
	 * Unicodeの強制変換を行います。
	 * <br>
	 * @param arg0 変換対象の文字列
	 * @param convList Unicode変換定義
	 * @return 変換後文字列
	 */
	private String changeUnicode(String arg0, char[][] convList)
	{
		if (JKKStringUtil.isNullBlank(arg0))
		{
			return arg0;
		}

		char[] chars = arg0.toCharArray();

		for (int i = 0; i < chars.length; i++)
		{
			chars[i] = transUnicode(chars[i], convList);
		}

		return new String(chars);
	}
	/**
	 * 指定された変換定義に従ってUnicodeの強制変換を行います。
	 * <br>
	 * @param c Unicode変換する文字
	 * @param convList Unicode変換定義
	 * @return Unicode変換された文字
	 */
	private char transUnicode(char c, char[][] convList)
	{
		for (int i = 0; i < convList.length; i++)
		{
			char[] chars = convList[i];

			if (chars[0] == c)
			{
				return chars[1];
			}
		}

		return c;
	}
	// ANK-4092-08-00 ADD END
	
	// ANK-4092-14-00 ADD START
	/**
	 * 単項目チェックを行い、エラーがある場合リストにエラーを登録して返却する。
	 * <br>
	 * @param handle ハンドル
	 * @param param パラメータ
	 * @param fixedText パラメータ取得文字
	 * @param ccMsg パラメータを保持するマップ
	 * @param processingType 処理区分
	 * @return エラーリスト
	 * @throws Throwable
	 */
	private List<Map<String, String>> getErrOfUnitParam(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			Map<String, Object> ccMsg) throws Throwable {
		// エラーリスト
		List<Map<String, String>> errList = new ArrayList<Map<String, String>>();

		String itemName = null;
		String itemValue = null;
		
		// メッセージID
		itemName = MESSAGE_ID;
		itemValue = (String)ccMsg.get(itemName);
		// 必須チェック
		if ( JKKStringUtil.isNullBlank(itemValue) )
		{
			// 必須チェックエラー
			errList.add(getReqErrInfMap(itemName));
		}
		
		// 電話番号
		itemName = ADDRESS;
		itemValue = (String)ccMsg.get(itemName);
		// 必須チェック
		if ( JKKStringUtil.isNullBlank(itemValue) )
		{
			// 必須チェックエラー
			errList.add(getReqErrInfMap(itemName));
		}
		
		// 配信結果
		itemName = DELIVERY_STATUS;
		itemValue = (String)ccMsg.get(itemName);
		// 必須チェック
		if ( JKKStringUtil.isNullBlank(itemValue) )
		{
			// 必須チェックエラー
			errList.add(getReqErrInfMap(itemName));
		}
		
		// 配信結果通知時刻
		itemName = NOFITY_TIME;
		itemValue = (String)ccMsg.get(itemName);
		// 必須チェック
		if ( JKKStringUtil.isNullBlank(itemValue) )
		{
			// 必須チェックエラー
			errList.add(getReqErrInfMap(itemName));
		}
		


		return errList;
	}

	/**
	 * 単項目チェックの必須エラーマップ作成メソッドです。
	 * 
	 * @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);
		
		return returnMap;
	}

	// ANK-4092-14-00 ADD END
}
