/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			： eo顧客基幹システム
*	モジュール名		JBSbatCRTaioKirokEfileRonriDel
*	ソースファイル名		：JBSbatCRTaioKirokEfileRonriDel.java
*	作成者			： GDC)ミコ
*	作成日			：2020年04月23日
*＜機能概要＞
*添付ウイルスメール論理削除
*＜修正履歴＞
*
*バージョン	修正日		 修正者		修正内容
*v49.00.00  2020/04/23  GDC)ミコ 【ANK-3845-00-00】 対応履歴添付ウイルスメールの削除
*v56.00.00  2021/11/08  FJ)北村  【ANK-4157-00-00】 対応履歴メールのウイルス添付ファイル削除 Step2
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCRBatCommon;
import eo.business.util.file.JBSbatCRIFM061;
import eo.business.util.table.JBSbatCR_T_TORK_EFILE_KNRI;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* 添付ウイルスメール論理削除 <p>
*<BR>
* @author ミコ
*/
public class JBSbatCRTaioKirokEfileRonriDel extends JBSbatBusinessService {
	
	/** テーブルアクセスクラス(対応履歴電子ファイル管理)*/
    private JBSbatSQLAccess db_CR_T_TORK_EFILE_KNRI = null;

    /** テーブル(対応履歴電子ファイル管理)*/
	private static final String D_TBL_NAME_CR_T_TORK_EFILE_KNRI = "CR_T_TORK_EFILE_KNRI";
	
	//*--<< ANK-4157-00-00 MOD START>>--*//
	/** SQL定義キー(CR_UPDATE_002)*/
	// private static final String CR_T_TORK_EFILE_KNRI_CR_UPDATE_002 = "CR_UPDATE_002";
	private static final String CR_T_TORK_EFILE_KNRI_CR_UPDATE_006 = "CR_UPDATE_006";
	//*--<< ANK-4157-00-00 MOD END>>--*//
	//*--<< ANK-4157-00-00 ADD START>>--*//

	/** テーブルアクセスクラス(対応履歴電子ファイル管理_検索用)*/
	private JBSbatSQLAccess db_SEL_CR_T_TORK_EFILE_KNRI = null;

	/** テーブルアクセスクラス(電子ファイル管理)*/
	private JBSbatSQLAccess db_CC_T_EFILE_KANRI = null;

	/** テーブルアクセスクラス(対応記録)*/
	private JBSbatSQLAccess db_CR_T_TAIO_KIROK = null;

	/** テーブル(電子ファイル管理)*/
	private static final String D_TBL_NAME_CC_T_EFILE_KANRI = "CC_T_EFILE_KANRI";

	/** テーブル(対応記録)*/
	private static final String D_TBL_NAME_CR_T_TAIO_KIROK = "CR_T_TAIO_KIROK";

	/** SQL定義キー(CR_SELECT_001)*/
	private static final String CC_T_EFILE_KANRI_CR_SELECT_001 = "CR_SELECT_001";	

	/** SQL定義キー(CR_SELECT_011)*/
	private static final String CR_T_TORK_EFILE_KNRI_CR_SELECT_011 = "CR_SELECT_011";

	/** SQL定義キー(CR_UPDATE_011)*/
	private static final String CR_T_TAIO_KIROK_CR_UPDATE_011 = "CR_UPDATE_011";

	/** 論理削除対象への紐づき更新 */
	private static final String DEL_TITLE_SETVALUE = "【VIRUS削除済】";
	//*--<< ANK-4157-00-00 ADD  END >>--*//
    
	/** システム日付時分秒(17桁) */
    private String sysDtms = null;
    
	/** ユーザIDの取得 */
	private String batchUserId = null;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception {
		
        super.setCommonInfo(commonItem);

        // DBアクセスクラスを生成します
        db_CR_T_TORK_EFILE_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_TORK_EFILE_KNRI);

        //*--<< ANK-4157-00-00 ADD START>>--*//
        db_SEL_CR_T_TORK_EFILE_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_TORK_EFILE_KNRI);

        db_CC_T_EFILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CC_T_EFILE_KANRI);

        db_CR_T_TAIO_KIROK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_TAIO_KIROK);
        //*--<< ANK-4157-00-00 ADD  END >>--*//

        // 処理日時取得(共通部品)
        sysDtms = JCRBatCommon.getSysDateTimeStamp();

        //バッチ更新者ＩＤ
        batchUserId = commonItem.getBatchUserId();
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception {
		
        //1.電子ファイル管理番号取得
        //入力ファイル から、"FILE_NAME"を取得する。
        //*--<< ANK-4157-00-00 MOD START>>--*//
        //String file_nm = inMap.getString(JBSbatCRIFM006.FILE_NM);
		String file_nm = inMap.getString(JBSbatCRIFM061.FILE_NM);
        //*--<< ANK-4157-00-00 MOD  END >>--*//
        
        //電子ファイル管理番号
        String denshiFairuKanriNo = null;
        
        //FILE_NAMEの長さ < 15 の場合、何もしないで処理終了（return null）する。
        if(file_nm.length() < 15) {
            return null;
		} else {
			//上記以外の場合、FILE_NAMEの頭15桁を取得して、電子ファイル管理番号とする。
			denshiFairuKanriNo = file_nm.substring(0,15);
		}
		
        //2.対応履歴電子ファイル管理の更新
        //3.電子ファイル管理の更新
        deleteDenshiFile(denshiFairuKanriNo);
        
        return null;
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception {
        db_CR_T_TORK_EFILE_KNRI.close();
        //*--<< ANK-4157-00-00 ADD START>>--*//
        db_SEL_CR_T_TORK_EFILE_KNRI.close();
		db_CC_T_EFILE_KANRI.close();
        db_CR_T_TAIO_KIROK.close();
        //*--<< ANK-4157-00-00 ADD  END >>--*//
    }

    /**
	 * 電子文書ファイル論理削除<br>
	 * @param denshiKanriNo 電子対応記録番号
	 * @throws Exception 例外
	 */
	private void deleteDenshiFile(String denshiKanriNo) throws Exception
	{
		if(denshiKanriNo == null){
			return;
		}
		//*--<< ANK-4157-00-00 ADD START>>--*//
		// 対応履歴電子ファイル管理テーブルより対応記録の紐づけが存在する論理削除対象を取得。
		executeCR_T_TORK_EFILE_KNRI_CR_SELECT_011(new Object[]{denshiKanriNo});
		//*--<< ANK-4157-00-00 ADD  END >>--*//

		// 対応履歴電子ファイル管理テーブルのレコードを論理削除
		executeCR_T_TORK_EFILE_KNRI_CR_UPDATE_006(new Object[]{sysDtms,batchUserId, sysDtms, batchUserId, denshiKanriNo});

		//*--<< ANK-4157-00-00 MOD START>>--*//
		// 電子ファイル管理を検索し、有効レコードが存在することを確認する。
		if(denshiFileRecordExists(denshiKanriNo)) {
			// 共通電子ファイル管理テーブルのレコードを論理削除
			JCRBatCommon.deleteDenshiFile(commonItem, denshiKanriNo);
		}
		//*--<< ANK-4157-00-00 MOD  END >>--*//

		super.logPrint.printDebugLog("対応履歴電子ファイル管理、電子ファイル管理テーブル論理削除");
		super.logPrint.printDebugLog("電子ファイル管理番号:" + denshiKanriNo);

		//*--<< ANK-4157-00-00 ADD START>>--*//
		JBSbatCommonDBInterface rcvMap = new JBSbatCommonDBInterface();
		// レコードが存在すれば、
		while(null != (rcvMap = db_SEL_CR_T_TORK_EFILE_KNRI.selectNext()))
		{
			// 対応記録番号を取得
			String taioKirokuNo = rcvMap.getString(JBSbatCR_T_TORK_EFILE_KNRI.TAIO_KIROK_NO);
			// 対応記録テーブルのレコードを更新
			executeCR_T_TAIO_KIROK_CR_UPDATE_011(new Object[]{sysDtms, taioKirokuNo});

			super.logPrint.printDebugLog("対応記録テーブル論理更新");
			super.logPrint.printDebugLog("対応記録番号:" + taioKirokuNo);
		}
		//*--<< ANK-4157-00-00 ADD  END >>--*//

	}

	/**
	 * SQLKEY(CR_UPDATE_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 executeCR_T_TORK_EFILE_KNRI_CR_UPDATE_006(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_CR_T_TORK_EFILE_KNRI.executeBySqlDefine(paramList, CR_T_TORK_EFILE_KNRI_CR_UPDATE_006);
    }

	//*--<< ANK-4157-00-00 ADD START>>--*//
	/**
	 * SQLKEY(CR_SELECT_011)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	電子ファイル管理番号
	 *		 	文字列「【VIRUS削除済】」
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCR_T_TORK_EFILE_KNRI_CR_SELECT_011(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(DEL_TITLE_SETVALUE);		// タイトル付与文字列

		// DBアクセスを実行します
		db_SEL_CR_T_TORK_EFILE_KNRI.selectBySqlDefine(paramList, CR_T_TORK_EFILE_KNRI_CR_SELECT_011);
	}

	/**
	 * SQLKEY(CR_UPDATE_011)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	文字列「【VIRUS削除済】」
	 *		 	更新年月日時分秒
	 *		 	対応記録番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
    private void executeCR_T_TAIO_KIROK_CR_UPDATE_011(Object[] param) throws Exception {
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(DEL_TITLE_SETVALUE);		// タイトル付与文字列
		paramList.setValue(param[0].toString());	// 更新日時
		paramList.setValue(param[1].toString());	// 対応記録番号

		// DBアクセスを実行します
		db_CR_T_TAIO_KIROK.executeBySqlDefine(paramList, CR_T_TAIO_KIROK_CR_UPDATE_011);

	}

    /**
     * 電子ファイル管理を検索し、有効レコードが存在することを確認。
     * @param denshiFairuKanriNo 電子ファイル管理番号
     * @throws Exception
     */
    private boolean denshiFileRecordExists(String denshiFairuKanriNo) throws Exception
    {
    	executeCC_T_EFILE_KANRI_CR_SELECT_001(new Object[] {denshiFairuKanriNo});

    	// DBアクセスを実行します
    	JBSbatCommonDBInterface dbEfileKanri = db_CC_T_EFILE_KANRI.selectNext();

    	if(dbEfileKanri != null){
    		return true;
    	}

    	return false;

    }

    /**
     * @param param
     * @throws Exception
     */
    private void executeCC_T_EFILE_KANRI_CR_SELECT_001(Object[] param) throws Exception
    {
    	// バイント変数のリストを生成します
    	JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
    	paramList.setValue(param[0].toString());

    	// DBアクセスを実行します
    	db_CC_T_EFILE_KANRI.selectBySqlDefine(paramList, CC_T_EFILE_KANRI_CR_SELECT_001);
    }

	//*--<< ANK-4157-00-00 ADD  END >>--*//
}

