/*********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名			：eo顧客基幹システム
 *	モジュール名		JBSbatCRTaioKirokEfileChsht
 *	ソースファイル名	JBSbatCRTaioKirokEfileChsht.java
 *	作成者				：富士通　
 *	作成日				：2020年04月27日
 *	バージョン	修正日		修正者		修正内容
 *	v49.00.00	2020/04/27	FJ)Eric		【ANK-3845-00-00】
 *********************************************************************/
package eo.business.service;


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import oracle.sql.BLOB;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCRBatCommon;
import eo.business.util.file.JBSbatCRIFM005;
import eo.business.util.table.JBSbatCC_T_EFILE_KANRI;
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;

public class JBSbatCRTaioKirokEfileChsht extends JBSbatBusinessService {
	
	private JBSbatSQLAccess db_CR_T_TORK_EFILE_KNRI = null;
	
	private JBSbatSQLAccess db_CC_T_EFILE_KANRI = null;

	private static final String D_TBL_NAME_CR_T_TORK_EFILE_KNRI = "CR_T_TORK_EFILE_KNRI";
	
	private static final String D_TBL_NAME_CC_T_EFILE_KANRI = "CC_T_EFILE_KANRI";

	private static final String CR_T_TORK_EFILE_KNRI_CR_SELECT_009 = "CR_SELECT_009";	

	private static final String CC_T_EFILE_KANRI_CC_SELECT_001 = "CC_SELECT_001";	
	
	private String trgtDir = null;
	
	public void initial(JBSbatCommonItem commonItem) throws Exception {
		
        super.setCommonInfo(commonItem);
		
		db_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);
		
		trgtDir = JCRBatCommon.getApplicationConst("CR_VIRUS_CHECK_TRGT_DIR");
		
		File f_trgtDir = new File(trgtDir);
		// ディレクトリがなかったら作成
		if(!f_trgtDir.isDirectory()){
			f_trgtDir.mkdirs();
		}
		
	}

	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception {		
        String taioKirokNo = inMap.getString(JBSbatCRIFM005.TAIO_KIROK_NO);
		
		List<JBSbatCommonDBInterface> resultDataList = new ArrayList<JBSbatCommonDBInterface>();
		String[] selectParam = new String[1];
		int index = 0;
		selectParam[index++] = taioKirokNo;
		executeCR_T_TORK_EFILE_KNRI_CR_SELECT_009(selectParam);
		List<JBSbatCommonDBInterface> values = JCRBatCommon.getSelectedDataList(db_CR_T_TORK_EFILE_KNRI);
		
		if (values != null) {
			resultDataList.addAll(values);
		}
		
		for (int i = 0; i < resultDataList.size(); i++)
		{
			JBSbatCommonDBInterface selectedData = resultDataList.get(i);
			String efileKanriNo = selectedData.getString(JBSbatCC_T_EFILE_KANRI.EFILE_KANRI_NO);
		
			executeCC_T_EFILE_KANRI_CC_SELECT_001(new Object[]{efileKanriNo});
			JBSbatCommonDBInterface dbEfileKanri = db_CC_T_EFILE_KANRI.selectNext();

			if(dbEfileKanri != null) {
				createOutputFile(dbEfileKanri, efileKanriNo);
			}
		}
		
		return null;
	}


	public void terminal() throws Exception {
		db_CR_T_TORK_EFILE_KNRI.close();	
		db_CC_T_EFILE_KANRI.close();
	}

	/**
	 * @param param
	 * @throws Exception
	 */
	private void executeCR_T_TORK_EFILE_KNRI_CR_SELECT_009(Object[] param) throws Exception
	{
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		db_CR_T_TORK_EFILE_KNRI.selectBySqlDefine(paramList, CR_T_TORK_EFILE_KNRI_CR_SELECT_009);
	}
    
	/**
	 * @param param
	 * @throws Exception
	 */
	private void executeCC_T_EFILE_KANRI_CC_SELECT_001(Object[] param) throws Exception
	{
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		db_CC_T_EFILE_KANRI.selectBySqlDefine(paramList, CC_T_EFILE_KANRI_CC_SELECT_001);
	}
	

	private void createOutputFile(JBSbatCommonDBInterface map, String eFileKanriNo) throws Exception
	{
			BufferedInputStream  bis = null;
			BufferedOutputStream bos = null;
			InputStream isFile = null;
			
			String fileName = "";
			try
			{
				BLOB bpm = (BLOB)map.getValue("EFILE");
				isFile = bpm.getBinaryStream();
				
				fileName = trgtDir + File.separator + eFileKanriNo + ".zip";
				bis = new BufferedInputStream(isFile);
				bos = new BufferedOutputStream(new FileOutputStream(fileName));
				
				int len = 0;
				while (len != -1)
				{ 
					len = bis.read();
					if (len != -1)
					{
						bos.write(len);
					}
				}
				bos.flush();
			}
			finally
			{
				if(isFile != null)
				{
					isFile.close();
				}
				if(bos != null)
				{
					bos.close();
				}
				if(bis != null)
				{
					bis.close();
				}
			}
	}
}