/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSBatFUeFrontLoginBlockFileIktAdd
*	ソースファイル名	：JBSBatFUeFrontLoginBlockFileIktAdd.java
*	作成者				：富士通　
*	作成日				：2021年02月09日
*＜機能概要＞
*　eフロントログイン禁止ファイル一括登録部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v52.00.00	2021/02/09   富士通		新規作成
*********************************************************************/
package eo.business.service;

import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JCCbatShoriIraiUtil;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatFUIFM008;
import eo.business.util.table.JBSbatCC_T_DLYD_TRN_REQ;
import eo.common.constant.JKKStrConst;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JBSbatBusinessFileUtil;
import eo.framework.util.JBSbatCheckUtil;
import eo.framework.util.JBSbatDateUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSBatFUeFrontLoginBlockFileIktAdd extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(アカウント認証無効設定)*/
	private static final String D_TBL_NAME_ZM_T_ACNTNS_MK = "ZM_T_ACNTNS_MK_SET";

	/** テーブル(ダウンロードファイル管理)*/
	private static final String D_TBL_NAME_ZM_T_DL_FILE_KANRI = "ZM_T_DL_FILE_KANRI";

	/** SQL定義キー(ZM_DELETE_001)*/
	private static final String ZM_T_ACNTNS_MK_SET_ZM_DELETE_001 = "ZM_DELETE_001";

	/** SQL定義キー(ZM_INSERT_001)*/
	private static final String ZM_T_ACNTNS_MK_SET_ZM_INSERT_001 = "ZM_INSERT_001";

	/** SQL定義キー(KK_INSERT_002)*/
	private static final String ZM_T_DL_FILE_KANRI_KK_INSERT_002 = "KK_INSERT_002";

	/** テーブルアクセスクラス(アカウント認証無効設定)*/
	private JBSbatSQLAccess db_ZM_T_ACNTNS_MK_SET = null;

	/** テーブルアクセスクラス(ダウンロードファイル管理)*/
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** eフロントログイン禁止ファイル定義ファイル名 */
	private static final String FUIFM008_DEF = "FUIFM008.def";

	/** eフロントログイン禁止登録結果ファイル名 */
	private static final String FUIFM009_NAME = "FUIFM009.csv";

	/** 入力ファイル定義 */
	private static final String PARAM_IND = "IND";

	/** ファイルコード */
	private static final String FILE_CD = "FU01";

	/** 処理管理番号 */
	private static final String TRN_KANRI_NO = "000000000243";

	/** ファイル名編集用 */
	private static final String FILE_NM = "eフロントログイン禁止登録結果ファイル_yyyyMMddHHmmss.csv";

	/** ファイル名で利用するタイムスタンプのフォーマット */
	private static final String FILE_TIMESTAMP_FORMAT = "yyyyMMddHHmmss";

	/** eフロントログイン禁止登録結果ファイルオブジェクト */
	private JBSbatBusinessFileUtil fuifm009FileObj = null;

	/** eフロントログイン禁止登録結果ファイルレコード件数 */
	private int fuifm009RecordCnt = 0;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_ZM_T_ACNTNS_MK_SET = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_ACNTNS_MK);
		db_ZM_T_DL_FILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_DL_FILE_KANRI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// ディレイド処理依頼情報リストを取得する
		List<HashMap<String, Object>> shoriIraiList = JCCbatShoriIraiUtil.getShoriIraiInfo(commonItem, this.jobid);

		// ディレイド処理依頼情報リストが取得できない場合、処理を終了する
		if (null == shoriIraiList)
		{
			return null;
		}

		// フリー項目を取得する
		String[] freeItems = freeItem.split(JKKBatConst.S_PARAM_DELIM);

		// eフロントログイン禁止登録結果ファイルパス
		String fuifm009FilePath = freeItems[0] + FUIFM009_NAME;

		// eフロントログイン禁止ファイル定義ファイル名を取得する
		String fuifm008DefName = JBSbatAplConst.getAplConstValue(PARAM_IND) + FUIFM008_DEF;

		// ディレイド処理依頼情報リストの件数分繰り返す
		for (HashMap<String, Object> shoriIrai : shoriIraiList)
		{
			// チェックエラーフラグ
			boolean checkErrFlg = false;

			// 電子ファイル管理からeフロントログイン禁止ファイルを取得する
			String fuifm008FilePath = JCCBatCommon.searchDenshiFile(commonItem, (String)shoriIrai.get(JBSbatCC_T_DLYD_TRN_REQ.INPUT_EFILE_KANRI_NO));

			//eフロントログイン禁止ファイルオブジェクトを生成する
			JBSbatInputFileUtil fuifm008FileUtil = new JBSbatInputFileUtil(fuifm008FilePath);

			// eフロントログイン禁止ファイルオブジェクトを生成する
			JBSbatDefFileUtil fuifm008FileDef = new JBSbatDefFileUtil(fuifm008DefName, fuifm008FileUtil);

			// eフロントログイン禁止登録結果ファイルオブジェクトを生成する
			fuifm009FileObj = JKKBatCommon.createBusinessFileUtil(fuifm009FilePath, JKKBatConst.SJIS, JKKStrConst.LINE_SEPARATOR, JKKBatConst.S_SEP_CAM);

			// eフロントログイン禁止ファイルレコード件数
			int fuifm008RecordCnt = 0;

			// eフロントログイン禁止登録結果ファイルレコード件数
			fuifm009RecordCnt = 0;

			// Readerオブジェクトを生成する
			fuifm008FileUtil.createReader();

			// 登録用データリスト
			List<JBSbatServiceInterfaceMap> registList = new ArrayList<JBSbatServiceInterfaceMap>();
			
			// eフロントログイン禁止ファイルの件数分繰り返す
			while (fuifm008FileUtil.ready())
			{
				// ログインID
				String userId = JKKBatConst.SPACE;
				// ログイン禁止開始日時
				String acntnsMkStaYmdhm = JKKBatConst.SPACE;
				// ログイン禁止終了日時
				String acntnsMkEndYmdhm = JKKBatConst.SPACE;

				// ファイルから１レコードを取得する
				String line = fuifm008FileUtil.readLine();

				// eフロントログイン禁止ファイルレコード件数カウント
				fuifm008RecordCnt++;
				
				// 1行目はヘッダなので読み飛ばし
				if (fuifm008RecordCnt > 1)
				{
					// 空行の場合
					if (!JKKBatCommon.isNotNull(line))
					{
						createFuifm009(new String[]{}, "ＮＧ", "フォーマットエラー");
						checkErrFlg = true;
						continue;
					}
	
					// １レコードの情報をマップに格納する
					JBSbatServiceInterfaceMap recordMap = fuifm008FileDef.lineToObject(line, fuifm008FileUtil, fuifm008RecordCnt);
	
					// フォーマットチェックを行う
					if (recordMap.isInputErrorFlg())
					{
						// eフロントログイン禁止登録結果ファイルを出力する
						String[] data = line.split(JKKBatConst.S_SEP_CAM);
						createFuifm009(data, "ＮＧ", "フォーマットエラー");
						checkErrFlg = true;
						continue;
					}
	
					// ログインID
					userId = (String)recordMap.getMap().get(JBSbatFUIFM008.USER_ID);
					// ログイン禁止開始日時
					acntnsMkStaYmdhm = (String)recordMap.getMap().get(JBSbatFUIFM008.ACNTNS_MK_STA_YMDHM);
					// ログイン禁止終了日時
					acntnsMkEndYmdhm = (String)recordMap.getMap().get(JBSbatFUIFM008.ACNTNS_MK_END_YMDHM);
	
					// 単項目チェックを行う
					if (isSingleCheck(userId, acntnsMkStaYmdhm, acntnsMkEndYmdhm))
					{
						checkErrFlg = true;
						continue;
					}
					
					// 登録用データリストに追加
					registList.add(recordMap);
					
					// eフロントログイン禁止登録結果ファイルを出力する
					createFuifm009(new String[]{userId, acntnsMkStaYmdhm, acntnsMkEndYmdhm}, "ＯＫ", "");
				}
			}
			int acntnsMkNo = 0;
			if (!checkErrFlg)
			{
				// アカウント認証無効設定 全件削除
				executeZM_T_ACNTNS_MK_SET_ZM_DELETE_001();
				// アカウント認証無効設定の登録
				for (JBSbatServiceInterfaceMap registMap : registList)
				{
					acntnsMkNo++;
					// ログイン禁止開始日時
					String acntnsMkStaYmdhm = (String)registMap.getMap().get(JBSbatFUIFM008.ACNTNS_MK_STA_YMDHM);
					// ログイン禁止終了日時
					String acntnsMkEndYmdhm = (String)registMap.getMap().get(JBSbatFUIFM008.ACNTNS_MK_END_YMDHM);
					// 日付の変換
					acntnsMkStaYmdhm = dateTimeParse(acntnsMkStaYmdhm);
					acntnsMkEndYmdhm = dateTimeParse(acntnsMkEndYmdhm);
					
					String[] insertSetParam = new String[4];
					insertSetParam[0] = String.format("%010d", acntnsMkNo);
					insertSetParam[1] = (String)registMap.getMap().get(JBSbatFUIFM008.USER_ID);				// ログインID
					insertSetParam[2] = acntnsMkStaYmdhm;	// ログイン禁止開始日時
					insertSetParam[3] = acntnsMkEndYmdhm;	// ログイン禁止終了日時
					executeZM_T_ACNTNS_MK_SET_ZM_INSERT_001(insertSetParam);
				}
				commit();
			}

			// eフロントログイン禁止登録結果ファイルを閉じる
			JKKBatCommon.closeBusinessFileUtil(fuifm009FileObj);

			// ディレイド処理依頼番号
			String shoriIraiNo = (String)shoriIrai.get(JBSbatCC_T_DLYD_TRN_REQ.DLYD_TRN_REQ_NO);

			// ディレイド処理依頼結果更新
			// チェックエラーフラグがtrueの場合
			if (checkErrFlg)
			{
				JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, JKKStrConst.DLYD_TRN_RSLT_CD_APP_ERR, null);
			}
			// チェックエラーフラグがfalseの場合
			else
			{
				JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, JKKStrConst.DLYD_TRN_RSLT_CD_COMPLETE, null);
			}

			// 電子ファイル管理登録処理
			JBSbatCommonItem arg0 = commonItem;								// 業務共通電文
			String arg1 = FILE_CD;											// ファイルコード
			String arg2 = fuifm009FilePath;									// ファイルパス
			String arg3 = JBSbatDateUtil.adjustMonth(super.opeDate, 1);		// ファイル削除年月日（運用日付 + 1ヶ月）
			String[] rc = JCCBatCommon.createDenshiFile(arg0, arg1, arg2, arg3);

			// ログ出力
			super.logPrint.printDebugLog("電子ファイル管理番号(" + rc[0] + ")、世代登録年月日時分秒(" + rc[1] + ")");

			// システム日時を取得する
			String sysDateTime = JCCBatCommon.getSysDateTime();

			// ファイル名
			String fileName = FILE_NM.replaceAll(FILE_TIMESTAMP_FORMAT, sysDateTime);

			// ダウンロードファイル管理登録処理
			String[] insertSetParam2 = new String[5];
			insertSetParam2[0] = TRN_KANRI_NO;								// 処理管理番号
			insertSetParam2[1] = fileName;									// ファイル名
			insertSetParam2[2] = String.valueOf(fuifm009RecordCnt);			// データ件数
			insertSetParam2[3] = rc[0];										// 電子ファイル管理番号
			insertSetParam2[4] = rc[1];										// 世代登録年月日時分秒
			executeZM_T_DL_FILE_KANRI_KK_INSERT_002(insertSetParam2);

			// 一時ファイルを削除する
			File fuifm009File = new File(fuifm009FilePath);
			if (fuifm009File.exists())
			{
				fuifm009File.delete();
			}

			// 処理依頼1件を処理する毎にコミット
			commit();
		}
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_T_ACNTNS_MK_SET.close();
		db_ZM_T_DL_FILE_KANRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(ZM_DELETE_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_T_ACNTNS_MK_SET_ZM_DELETE_001() throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();

		// DBアクセスを実行します
		db_ZM_T_ACNTNS_MK_SET.executeBySqlDefine(paramList,ZM_T_ACNTNS_MK_SET_ZM_DELETE_001);
	}


	/**
	 * SQLKEY(ZM_INSERT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	ログインID
	 *		 	ログイン禁止開始日時
	 *		 	ログイン禁止終了日時
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_T_ACNTNS_MK_SET_ZM_INSERT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_ZM_T_ACNTNS_MK_SET.executeBySqlDefine(paramList, ZM_T_ACNTNS_MK_SET_ZM_INSERT_001);
	}

	/**
	 * SQLKEY(KK_INSERT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	処理管理番号
	 *		 	ファイル名
	 *		 	データ件数
	 *		 	電子ファイル管理番号
	 *		 	世代登録年月日時分秒
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_T_DL_FILE_KANRI_KK_INSERT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());

		// DBアクセスを実行します
		db_ZM_T_DL_FILE_KANRI.executeBySqlDefine(paramList, ZM_T_DL_FILE_KANRI_KK_INSERT_002);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	
	/**
	 * eフロントログイン禁止登録結果ファイルを出力する。<br>
	 * @param args 項目設定値
	 * @param addRslt 登録結果
	 * @param rsltNaiyo 結果内容
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void createFuifm009(String[] args, String addRslt, String rsltNaiyo) throws Exception
	{
		ArrayList<String> outputInfo = new ArrayList<String>();
		// 最初はヘッダを出力
		if (fuifm009RecordCnt == 0)
		{
			outputInfo.add("ログインID");
			outputInfo.add("ログイン禁止開始日時");
			outputInfo.add("ログイン禁止終了日時");
			outputInfo.add("登録結果");
			outputInfo.add("結果内容");
			JKKBatCommon.printBusinessFileUtil(fuifm009FileObj, outputInfo);
			outputInfo = new ArrayList<String>();
		}
		
		for(int i=0; i < args.length; i++){
			outputInfo.add(args[i]);
		}
		outputInfo.add(addRslt);				// 登録結果
		outputInfo.add(rsltNaiyo);				// 結果内容
		
		JKKBatCommon.printBusinessFileUtil(fuifm009FileObj, outputInfo);
		
		fuifm009RecordCnt++;
	}

	/**
	 * パラメタの単項目チェックを行う。<br>
	 * @param userId ログインID
	 * @param acntnsMkStaYmdhm ログイン禁止開始日時
	 * @param acntnsMkEndYmdhm ログイン禁止終了日時
	 * @return boolean false：エラーなし、true：エラーあり
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private boolean isSingleCheck(String userId, String acntnsMkStaYmdhm, String acntnsMkEndYmdhm) throws Exception
	{
		boolean singleCheckErrFlg = false;
		boolean dateCheckErrFlg = false;
		StringBuilder sb = new StringBuilder();
		// ログインID
		if (!JKKBatCommon.isNotNull(userId))
		{
			sb.append("必須エラー（ログインID）");
		} else {
			// 桁数チェック
			if (!JBSbatCheckUtil.invoke(userId, new String[]{"ketasuu2", "6", "10"}))
			{
				if (sb.length() > 0)
				{
					sb.append(",");
				}
				sb.append("桁数エラー（ログインID）");
			}
			
			// 形式チェック
			if (!JBSbatCheckUtil.invoke(userId, new String[]{"hannkakuesuuji1"}))
			{
				if (sb.length() > 0)
				{
					sb.append(",");
				}
				sb.append("属性エラー（ログインID）");
			}
		}

		String errorInfo = null;
		// ログイン禁止開始日時
		errorInfo = dateFormatCheck(acntnsMkStaYmdhm, "ログイン禁止開始日時");
		if (JKKBatCommon.isNotNull(errorInfo) || errorInfo.length() > 0)
		{
			if (sb.length() > 0)
			{
				sb.append(",");
			}
			sb.append(errorInfo);
			dateCheckErrFlg = true;
		}
		// ログイン禁止終了日時
		errorInfo = dateFormatCheck(acntnsMkEndYmdhm, "ログイン禁止終了日時");
		if (JKKBatCommon.isNotNull(errorInfo) || errorInfo.length() > 0)
		{
			if (sb.length() > 0)
			{
				sb.append(",");
			}
			sb.append(errorInfo);
			dateCheckErrFlg = true;
		}
		if (!dateCheckErrFlg)
		{
			// 日付の論理性チェック
			SimpleDateFormat instance = new SimpleDateFormat("yyyy/MM/dd HH:mm");
			Date staDate = instance.parse(acntnsMkStaYmdhm);
			Date endDate = instance.parse(acntnsMkEndYmdhm);
			if (staDate.compareTo(endDate) > 0)
			{
				if (sb.length() > 0)
				{
					sb.append(",");
				}
				sb.append("ログイン禁止開始日時より終了日時のほうが過去日（ログイン禁止開始日時）");
			}
		}
		if (sb.length() > 0)
		{
			createFuifm009(new String[]{userId, acntnsMkStaYmdhm, acntnsMkEndYmdhm}, "ＮＧ", sb.toString());
			singleCheckErrFlg = true;
		}
		return singleCheckErrFlg;
	}
	
	/**
	 * 日付項目のチェック
	 * @param value チェック値
	 * @param culumnNm 項目名
	 * @return エラーメッセージ
	 */
	private String dateFormatCheck(String value, String culumnNm)
	{
		StringBuilder sb = new StringBuilder();
		if (!JKKBatCommon.isNotNull(value))
		{
			sb.append("必須エラー（" + culumnNm + "）");
		} else {
			SimpleDateFormat instance = null;
			instance = new SimpleDateFormat("yyyy/MM/dd HH:mm");
			instance.setLenient(false);
			try
			{
				@SuppressWarnings("unused")
				Date date = instance.parse(value);
			}
			// 変換できなかった場合
			catch (ParseException e)
			{
				sb.append("属性エラー（" + culumnNm + "）");
			}
		}
		return sb.toString();
	}
	
	/**
	 * 年月日時分をyyyyMMddHHmm形式の文字列に変換して返却
	 * @param value
	 * @return
	 */
	private String dateTimeParse(String value)
	{
		SimpleDateFormat instance = null;
		instance = new SimpleDateFormat("yyyy/MM/dd HH:mm");
		try {
			Date date = instance.parse(value);
			instance = new SimpleDateFormat("yyyyMMddHHmm");
			String retDate = instance.format(date);
			return retDate;
		} catch (ParseException e) {
			return null;
		}
	}
}
