/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom  					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHOrosiRsltListMake
*	ソースファイル名	：JBSbatCHOrosiRsltListMake.java
*	作成者				：富士通　
*	作成日				：2018年04月13日
*＜機能概要＞
* 卸結果リスト作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v37.00.00	2018/04/13  FJ)森		【ANK-3366-00-00】eo光設備卸  新規作成
*	v37.01.00	2018/05/11  FJ)森		【IT1-2018-0000064】卸結果リストの総合計、件数合計、件数単位、卸入金額合計を削除
*********************************************************************/
package eo.business.service;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCHbatSeikyKaknoBusinessUtil;
import eo.business.util.file.JBSbatCHIFE065;
import eo.business.util.file.JBSbatCHIFM294;
import eo.business.util.table.JBSbatCH_T_SEIKY;
import eo.business.util.table.JBSbatCH_M_ORSJGS;
import eo.business.util.table.JBSbatKK_T_SEIKY_KEI;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JPCFomatString;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* 卸結果リスト作成 <p>
*<BR>
* @author 富士通
*/
public class JBSbatCHOrosiRsltListMake extends JBSbatBusinessService
{
	/** 項目ごとの囲み文字 */
	private final String KAKOMI_MOJI = "\"";
	
	/** 出力ファイル桁数（20桁） */
	private final int LENGTH_LIMIT_20 = 20;
	
	/** 出力ファイル桁数（25桁） */
	private final int LENGTH_LIMIT_25 = 25;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][opeDate=" + super.opeDate + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		
		JBSbatOutputItem outputItem = new JBSbatOutputItem();
		
		// 入力電文有無確認(最終レコード判定)
		if (inMap == null)
		{
			// 返却
			return outputItem;
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][inMap=" + inMap.getMap().toString() + "]");

		// ダミーレコード設定
		outputItem.addOutMapList(setDummyRecord());

		// 入金経路が"97"（卸先事業者）の情報を、卸結果リストに出力
		if(JACStrConst.NYKNKEIRCD_ORSJGS.equals(inMap.get(JBSbatCHIFM294.NYUKIN_ROUTE_CD)))
		{
			// 卸結果リスト作成
			makeOrosiRsltInfo(inMap, outputItem);
		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");

		return outputItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * ダミーレコードを設定します。
	 * 
	 * @return　ダミーレコード
	 * @throws Exception　業務サービス内で発生した例外
	 */
	private JBSbatServiceInterfaceMap setDummyRecord() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setDummyRecord]");
		
		JBSbatServiceInterfaceMap dummyMap = new JBSbatServiceInterfaceMap();
		
		// 出力フラグOFF
		dummyMap.setOutFlg(false);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setDummyRecord]");
		
		return dummyMap;
	}

	/**
	 * 卸結果リストを作成します。
	 * 
	 * @param inMap 入力電文
	 * @param outputItem　出力電文
	 * @throws Exception　業務サービス内で発生した例外
	 */
	private void makeOrosiRsltInfo(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputItem) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOrosiRsltInfo]");

		// 対象請求情報存在判定
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOrosiRsltInfo][inMap:" + (inMap == null ? "null" : inMap.getMap().toString() + "]"));
		if ("".equals(inMap.getString(JBSbatCHIFM294.SEIKY_NO_CH0051)))
		{
			// ログ出力（ＤＢ未存在エラー）
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECHB0240CW, new String[]
			{ JBSbatCH_T_SEIKY.TABLE_NAME, inMap.getString(JBSbatCHIFM294.SEIKY_NO) });
		}

		// 対象請求契約情報存在判定
		if ("".equals(inMap.getString(JBSbatCHIFM294.SEIKY_KEI_NO)))
		{
			// ログ出力（ＤＢ未存在エラー）
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECHB0240CW, new String[]
			{ JBSbatKK_T_SEIKY_KEI.TABLE_NAME, inMap.getString(JBSbatCHIFM294.SEIKY_SAKI_NO) });
		}

		// 卸先事業者名存在判定
		if (!"".equals(JBSbatCHIFM294.ORSJGS_CD)) {
			if ("".equals(inMap.getString(JBSbatCHIFM294.ORSJGS_CD_CH0911)))
			{
				// ログ出力（ＤＢ未存在エラー）
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECHB0240CW, new String[]
				{ JBSbatCH_M_ORSJGS.TABLE_NAME, inMap.getString(JBSbatCHIFM294.ORSJGS_CD) });
			}
		}

		// 抽出した情報を出力ファイルに設定
		JBSbatServiceInterfaceMap orosiRsltInfo = setOutputFile(inMap);

		// 出力フラグON
		orosiRsltInfo.setOutFlg(true);

		// 出力共通電文設定
		outputItem.addOutMapList(orosiRsltInfo);

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeOrosiRsltInfo]");

		return;
	}

	/**
	 * 卸結果リストへの出力内容を設定します。
	 * 
	 * @param inMap　入力電文
	 * @param seikyInfo　請求情報
	 * @param seikySakiNam　請求先名
	 * @return　卸結果リスト
	 * @throws Exception　業務サービス内で発生した例外
	 */
	private JBSbatServiceInterfaceMap setOutputFile(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setOutputFile]");
		
		JBSbatServiceInterfaceMap orosiRsltInfo = new JBSbatServiceInterfaceMap();

		// 処理結果
		orosiRsltInfo.set(JBSbatCHIFE065.TRAN_RSLT, inMap.getString(JBSbatCHIFM294.ERR_NAIYO));
		// 請求先番号
		orosiRsltInfo.set(JBSbatCHIFE065.SEIKY_SAKI_NO, inMap.getString(JBSbatCHIFM294.SEIKY_SAKI_NO));
		// 請求先名（20桁まで）
		String seikySakiNm = inMap.getString(JBSbatKK_T_SEIKY_KEI.SHS_KANA);
		if(seikySakiNm.length() > LENGTH_LIMIT_20)
		{
			seikySakiNm = seikySakiNm.substring(0, LENGTH_LIMIT_20);
		}
		orosiRsltInfo.set(JBSbatCHIFE065.SEIKY_SAKI_NM, seikySakiNm);
		// 請求年月
		orosiRsltInfo.set(JBSbatCHIFE065.SEIKY_YM, JPCFomatString.formatYears(inMap.getString(JBSbatCHIFM294.SEIKY_YM)));
		// 入金額
		orosiRsltInfo.set(JBSbatCHIFE065.NYUKIN_AMNT, JPCFomatString.formatNumber(inMap.getString(JBSbatCHIFM294.NYUKIN_AMNT)));
		// 卸先事業者コード
		orosiRsltInfo.set(JBSbatCHIFE065.ORSJGS_CD, inMap.getString(JBSbatCHIFM294.ORSJGS_CD));
		// 卸先事業者名（25桁まで）
		String orsjgsNm = inMap.getString(JBSbatCHIFM294.ORSJGS_NM);
		if(orsjgsNm.length() > LENGTH_LIMIT_25)
		{
			orsjgsNm = orsjgsNm.substring(0, LENGTH_LIMIT_25);
		}
		orosiRsltInfo.set(JBSbatCHIFE065.ORSJGS_NM, orsjgsNm);
// IT1-2018-0000064 DEL START
//		// 総合計
//		orosiRsltInfo.set(JBSbatCHIFE065.TTL, null);
//		// 件数合計
//		orosiRsltInfo.set(JBSbatCHIFE065.TTL_CNT, null);
//		// 件数単位
//		orosiRsltInfo.set(JBSbatCHIFE065.TTL_TANI, null);
//		// 卸入金額合計
//		orosiRsltInfo.set(JBSbatCHIFE065.TTL_ORS_NYUKIN, null);
// IT1-2018-0000064 DEL END
		// 出力内容を項目ごとにダブルコーテーション（""）で囲む
		orosiRsltInfo.setMap(JCHbatSeikyKaknoBusinessUtil.quote(orosiRsltInfo.getMap(), KAKOMI_MOJI, KAKOMI_MOJI));
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setOutputFile]");
		
		return orosiRsltInfo;
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
		
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
}
