/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCNIspSikySaksei
*	ソースファイル名	：JBSbatCNIspSikySaksei.java
*	作成者				：富士通　
*	作成日				：2011年04月26日
*＜機能概要＞
*　コンテンツISP課金請求データ作成処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/04/26   富士通		新規作成
*	v4.00.00	2012/11/07   FJ)小林	【ST1-2012-0000954】警告終了後、処理続行するよう修正。(shellリターンコード:8へ修正)
*	v8.00.00	2014/01/10   FJ)鄭	【ANK-1585-00-00】050電話番号付与処理を追加
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCNBatCommon;
import eo.common.constant.JCNStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.business.util.file.JBSbatACIFI006;
import eo.business.util.file.JBSbatCNIFM001002;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatCNIspSikySaksei extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** メッセージキー(ECNB0020JW)*/
	private static final String ECNB0020JW = JPCBatchMessageConstant.ECNB0020JW;
	
	/** メッセージキー(ECNB0090AI)*/
	private static final String ECNB0090AI = JPCBatchMessageConstant.ECNB0090AI;
	
	/** ファイル名(コンテンツISP請求情報)*/
	private static final String S_CN_F_CONT_ISP_CHRG = "コンテンツISP請求情報";
	
	/** 請求時期指定="1"固定変数*/
	private static final String S_SEIKY_JK_STI = "1";
	
	/** ファイル出力件数カウント*/
	int outCnt = 0;
	
	/** 請求金額保持*/
	long l_Seikyu_Kingaku = 0;
	
	/** レコード集計時の課金額格納変数*/
	long l_Chrg_Amnt = 0;
	
	/** レコード集計時の売上減額格納変数*/
	long l_Sales_Gen_Amnt = 0;
	
	/** レコード集計時の補償費格納変数*/
	long l_Compensation = 0;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @param outputInItem 入力情報
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		JBSbatServiceInterfaceMap tmpBean = null; // 出力用領域
		
		// 請求番号の空白10桁埋め変数
		String str_Seikyu_No = JCNBatCommon.adjustCharSize("", 10, JCNStrConst.SJIS);

		// 請求金額(string型変換後)
		String strSeiKingaku = "";
		
		// 1件目（退避リストが空のとき）
		if (!outputInItem.isOutMapList())
		{
			// ファイルにNO_DATAが存在した場合（取得結果0件）は警告終了を行う。
			if (JCNStrConst.S_NO_DATA.equals(inMap.getString("CHRG_TRGT_YM")))
			{
				// 出力件数ログ出力
				super.logPrint.printBusinessErrorLog(ECNB0090AI, new String[] {S_CN_F_CONT_ISP_CHRG, String.valueOf(outCnt)});
				super.logPrint.printBusinessErrorLog(ECNB0020JW);
				super.commonItem.setErrorCount(1);
				return outputInItem;
			}
			
			// 1件目のレコードより金額項目を取得する
			l_Chrg_Amnt = inMap.getLong("CHRG_AMNT");
			l_Sales_Gen_Amnt = inMap.getLong("SALES_GEN_AMNT");
			l_Compensation = inMap.getLong("COMPENSATION");
			
			// 出力電文に入力電文を設定して返却。（出力フラグはfalse）
			outputInItem.addOutMapList(inMap);
			return outputInItem;
		}
		
		// 出力電文に設定されている内容（集計結果）を取得する。
		tmpBean = (JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0);
		
		// 入力なし（＝レコードの最終行）の場合、集計結果を出力して処理を終了する。
		if (inMap == null)
		{
			// 請求金額 ＝ 前回までの請求金額 ＋ 課金額 − 売上減額 − 補償費
			l_Seikyu_Kingaku = l_Seikyu_Kingaku + l_Chrg_Amnt - l_Sales_Gen_Amnt - l_Compensation;
			
			((JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0)).setString(JBSbatACIFI006.SEIKY_KEI_NO, str_Seikyu_No);
			((JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0)).setString(JBSbatACIFI006.SVC_KEI_NO, 
					tmpBean.getString("ISP_KSSAI_SVC_KEI_NO"));
			((JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0)).setString(JBSbatACIFI006.N_050_TELNO, tmpBean.getString("N_050_TELNO"));
//			((JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0)).setString(JBSbatACIFI006.PCRS_CD, tmpBean.getString("PCRS_CD"));
//			((JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0)).setString(JBSbatACIFI006.PRC_SVC_CD, tmpBean.getString("PRC_SVC_CD"));
			((JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0)).setString(JBSbatACIFI006.PRC_KMK_CD, tmpBean.getString("PRC_KMK_CD"));
			((JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0)).setString(JBSbatACIFI006.SEIKY_JIKI_SHITEI, S_SEIKY_JK_STI);
			((JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0)).setString(JBSbatACIFI006.SEIKY_YM, tmpBean.getString("CHRG_TRGT_YM"));
			
			if (l_Seikyu_Kingaku < 0)
			{
				// 請求金額が0未満の場合は「-」を含めて12桁になるように0埋めする。
				String strKingaku = String.valueOf(l_Seikyu_Kingaku);
				strSeiKingaku = JCNStrConst.S_HAIFUN + JCNBatCommon.strZeroPad(strKingaku.substring(1, strKingaku.length()), 11);
			}
			else
			{
				// 請求金額が0以上の場合は12桁になるように0埋めする。
				String strKingaku = String.valueOf(l_Seikyu_Kingaku);
				strSeiKingaku = JCNBatCommon.strZeroPad(strKingaku, 12);
			}
			((JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0)).setString(JBSbatACIFI006.SEIKY_AMNT, strSeiKingaku);
			// 1レコード分出力後、請求金額を初期化
			l_Seikyu_Kingaku = 0;
			
			tmpBean.setOutFlg(true);
			
			outCnt++;
			// 出力件数ログ出力
			super.logPrint.printBusinessErrorLog(ECNB0090AI, new String[] {S_CN_F_CONT_ISP_CHRG, String.valueOf(outCnt)});
			
			return outputInItem;
		}
		
		// キー（入力）の設定。
		StringBuffer inkeyBuf = new StringBuffer();
		inkeyBuf.append(inMap.getString(JBSbatCNIFM001002.ISP_KSSAI_SVC_KEI_NO));
//		inkeyBuf.append(inMap.getString(JBSbatCNIFM001002.PRC_SVC_CD));
		inkeyBuf.append(inMap.getString(JBSbatCNIFM001002.PRC_KMK_CD));
//		inkeyBuf.append(inMap.getString(JBSbatCNIFM001002.PCRS_CD));
		inkeyBuf.append(inMap.getString(JBSbatCNIFM001002.N_050_TELNO));
		String inKey = inkeyBuf.toString(); // キー（マスタ）メイン生成

		// キー（退避）の設定。
		StringBuffer keyBufTmp = new StringBuffer();
		keyBufTmp.append(tmpBean.getString(JBSbatCNIFM001002.ISP_KSSAI_SVC_KEI_NO));
//		keyBufTmp.append(tmpBean.getString(JBSbatCNIFM001002.PRC_SVC_CD));
		keyBufTmp.append(tmpBean.getString(JBSbatCNIFM001002.PRC_KMK_CD));
//		keyBufTmp.append(tmpBean.getString(JBSbatCNIFM001002.PCRS_CD));
		keyBufTmp.append(tmpBean.getString(JBSbatCNIFM001002.N_050_TELNO));
		String tmpKey = keyBufTmp.toString(); // キー（退避）メイン生成
		
		// キーが一致
		if (inKey.equals(tmpKey))
		{
			// 集約計算のみ実施 請求金額 ＝ 前回までの請求金額 ＋ 課金額 − 売上減額 − 補償費
			l_Seikyu_Kingaku = l_Seikyu_Kingaku + l_Chrg_Amnt - l_Sales_Gen_Amnt - l_Compensation;
		}
		else
		{
			// 請求金額 ＝ 前回までの請求金額 ＋ 課金額 − 売上減額 − 補償費
			l_Seikyu_Kingaku = l_Seikyu_Kingaku + l_Chrg_Amnt - l_Sales_Gen_Amnt - l_Compensation;
			
			((JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0)).setString(JBSbatACIFI006.SEIKY_KEI_NO, str_Seikyu_No);
			((JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0)).setString(JBSbatACIFI006.SVC_KEI_NO, 
					tmpBean.getString("ISP_KSSAI_SVC_KEI_NO"));
			((JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0)).setString(JBSbatACIFI006.N_050_TELNO, tmpBean.getString("N_050_TELNO"));
//20120824.IF改変対応.ajioka			((JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0)).setString(JBSbatACIFI006.PCRS_CD, tmpBean.getString("PCRS_CD"));
//20120824.IF改変対応.ajioka			((JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0)).setString(JBSbatACIFI006.PRC_SVC_CD, tmpBean.getString("PRC_SVC_CD"));
			((JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0)).setString(JBSbatACIFI006.PRC_KMK_CD, tmpBean.getString("PRC_KMK_CD"));
			((JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0)).setString(JBSbatACIFI006.SEIKY_JIKI_SHITEI, S_SEIKY_JK_STI);
			((JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0)).setString(JBSbatACIFI006.SEIKY_YM, tmpBean.getString("CHRG_TRGT_YM"));
			
			if (l_Seikyu_Kingaku < 0)
			{
				// 請求金額が0未満の場合は「-」を含めて12桁になるように0埋めする。
				String strKingaku = String.valueOf(l_Seikyu_Kingaku);
				strSeiKingaku = JCNStrConst.S_HAIFUN + JCNBatCommon.strZeroPad(strKingaku.substring(1, strKingaku.length()), 11);
			}
			else
			{
				// 請求金額が0以上の場合は12桁になるように0埋めする。
				String strKingaku = String.valueOf(l_Seikyu_Kingaku);
				strSeiKingaku = JCNBatCommon.strZeroPad(strKingaku, 12);
			}
			((JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0)).setString(JBSbatACIFI006.SEIKY_AMNT, strSeiKingaku);
			// 1レコード分出力後、請求金額を初期化
			l_Seikyu_Kingaku = 0;
			
			tmpBean.setOutFlg(true);
			
			outCnt++;
			// 現レコードを出力領域に設定。ただし出力フラグはオフのまま。
			outputInItem.addOutMapList(inMap);
		}
		
		// 2件目以降の金額項目を取得
		l_Chrg_Amnt = inMap.getLong("CHRG_AMNT");
		l_Sales_Gen_Amnt = inMap.getLong("SALES_GEN_AMNT");
		l_Compensation = inMap.getLong("COMPENSATION");
		
		return outputInItem;

	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
