/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：JCHejbCH0051SecProc
 *	ソースファイル名：JCHejbCH0051SecProc.java
 *	作成者			：富士通
 *	日付			：2011年09月30日
 *＜機能概要＞
 *	請求に対する副次処理を行う部品
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2011/09/30	富士通		新規作成
 *	v5.00.00	2013/07/13	FJ)	住友   【LT-2013-0000415】窓口払いで請求再発行した場合の請求方法の設定不備
 *	v5.00.01	2013/07/25	FJ)	早崎   【IT1-2013-0001427】内部管理-0000592対応(EAN取扱期限日の形式修正)戻し対応
 *	v5.00.02    2013/08/27  FJ) 林     【IT1-2013-0001612】請求取消仕様変更。請求取消時の請求スキーマ更新メソッドを削除。
 *	v6.00.00    2013/11/24	FJ)小野    【OM-2013-0003532】入金取消時の債権、債権内訳、請求テーブルの更新処理変更に伴い、入金取消時の請求更新メソッドを追加。
 *	v8.00.01    2014/02/14  FJ) 林     【OM-2013-0005255】料金調整画面、請求作成機能追加。請求登録処理追加。
 *	v9.00.00	2014/04/21  FJ) 林	   【OM-2014-0001510】EANバーコード印紙フラグ設定不備対応
 *	v24.00.00	2016/03/01  FJ）宇野   【OM-2016-0000569】性能障害対応
 *	v46.00.00   2019/10/14  FJ)星野     【ANK-3586-00-00】
 *	v52.00.00	2020/10/20	FJ) 三原	【ANK-3838-00-00】窓口払い手数料の顧客負担方式導入
 *	v57.00.00	2022/02/25  FJ）西窪	【ANK-4206-00-00】請求書再発行時の発行回数改善対応
 *	v67.00.00	2023/09/09	FJ) 田中   【#64121】請求スキーマ卸先事業者コードの設定
**********************************************************************/

package eo.ejb.common.db;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.fujitsu.futurity.common.JCCWebAddTrnId;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANCreateException;
import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANFinderException;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.constant.JACStrConst;
import eo.common.util.JCHCommonBarcodeEdit;
import eo.common.util.JCHCommonFormatUtil;
import eo.common.util.JPCUtilCommon;
import eo.ejb.cbm.entity.CH0051ETMsg;
import eo.ejb.cbm.entity.CH0051LE;
import eo.ejb.cbm.entity.KK0491ETMsg;
import eo.ejb.cbs.cbsmsg.ECH0051D012CBSMsg;
import eo.ejb.cbs.cbsmsg.ECH0051D012CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECH0051D012CBSMsg2List;
import eo.ejb.cbs.cbsmsg.ECH0101D011CBSMsg;
import eo.ejb.cbs.cbsmsg.ECH0101D011CBSMsg7List;
import eo.ejb.common.JCCModelCommon;
import eo.ejb.common.JCHModelCommon;
import eo.ejb.common.edit.JCHejbCH0051NumberParts;

/**
 * <p>
 * 請求に対する副次処理を行う部品です。
 * </p>
 * 
 * @author 富士通
 */
public class JCHejbCH0051SecProc extends JCHejbCH0051DBABase 
{

	/** NULL(DB更新用) **/
	private static final String STR_NULL = null;
	
	/** 請求種別コード(再発行) **/
	private static final String SEIKY_SBT_CD_SAIHAKKO = "3";
	
	/** 請求方法コード(窓口) **/
	private static final String SEIKY_WAY_CD_MADOGUCHI = "1";
	
	/** 請求方法コード(口座振替) **/
	private static final String SEIKY_WAY_CD_KOUZA = "2";
	
	/** 請求方法コード(郵便自動振込) **/
	private static final String SEIKY_WAY_CD_AUTO_POST = "3";
	
	/** 請求方法コード(クレジット) **/
	private static final String SEIKY_WAY_CD_CREDIT = "4";
	
	/** 印刷様式(窓口) **/
	private static final String PRINT_STYLE_CD_MADOGUCHI = "0";
	
	/** 印刷様式(口座振替) **/
	private static final String PRINT_STYLE_CD_KOUZA = "1";
	
	/** 印刷様式(クレジット) **/
	private static final String PRINT_STYLE_CD_CREDIT = "2";
	
	/** 印刷様式(口振領収書のみ) **/
	private static final String PRINT_STYLE_CD_ONLY_RECIPT = "3";
	
	// ANK-3838-00-00 ADD START
	/** 印刷様式(窓口_顧客負担) **/
	private static final String PRINT_STYLE_CD_MADOGUCHI_CUST = "4";
	// ANK-3838-00-00 ADD END
	
	/** 強制窓口フラグ(解除) */
	private static final String KYOSEI_MADOGUCHI_FLG_RELEASE = "0";
	
	/** テンプレートID取得用 */
	private static final String TEMPLATEID = "templateID";
	
	/** テンプレートID比較用 */
	private static final String ECH0101D011 = "ECH0101D011";
	private static final String ECH0101D012 = "ECH0101D012";

	/**
	 * コンストラクタです。
	 */
	public JCHejbCH0051SecProc() {
		super();
	}

	/**
	 * <p>
	 * 料金調整請求変更副次処理部品
	 * 料金調整登録時に請求の更新を行う。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param sSeikyNo 更新対象の請求番号
	 * @param sSeikyAmntAjstYMD 請求金額調整年月日
	 */
	public void PrcAdjSeikyUp(CAANMsg cbsMsg, String sSeikyNo, String sSeikyAmntAjstYMD) {
		
		try {
			
			// 請求の請求金額調整年月日を更新する。
			CAANMsg inETMsgSeiky = new CAANMsg(CH0051ETMsg.class.getName());
			
			inETMsgSeiky.set(CH0051ETMsg.SEIKY_NO, sSeikyNo);
			inETMsgSeiky.set(CH0051ETMsg.SEIKY_AMNT_ADJ_YMD, sSeikyAmntAjstYMD);
			
			super.update(inETMsgSeiky);
			
		} catch (CAANException e) {
			
			throw new CAANRuntimeException(e);
			
		} catch (Exception e) {
			
			throw new CAANRuntimeException(e);
		}
	}
	
	/**
	 * <p>
	 * ECH0101D011_料金調整登録、ECH0101D012_料金変更登録、ECH0051D011_随時請求登録
	 * 請求の登録処理を行う。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */
	public void executePrcAdjSeiky(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		try 
		{
			// テンプレートID取得
			String sTempID = inCBSMsg.getString(TEMPLATEID);

			// 請求の請求調整年月日を更新する。
			CAANMsg inETMsgSeiky = new CAANMsg(CH0051ETMsg.class.getName());

			// 請求年月
			String seikyYm = inCBSMsg.getString(JACStrConst.ECH0101CBSMSG_SEIKY_YM);
			inETMsgSeiky.set(CH0051ETMsg.SEIKY_YM, seikyYm);
			// 請求番号
			String seikyNo = inCBSMsg.getString(JACStrConst.ECH0101CBSMSG_SEIKY_NO);
			inETMsgSeiky.set(CH0051ETMsg.SEIKY_NO, seikyNo);

			if(ECH0101D011.equals(sTempID))
			{
				inETMsgSeiky.set(CH0051ETMsg.SEIKY_AMNT_ADJ_YMD, inCBSMsg.getString(JACStrConst.ECH0101CBSMSG_SEIKY_AMNT_AJST_YMD));
			}
			else if(ECH0101D012.equals(sTempID))
			{
				inETMsgSeiky.set(CH0051ETMsg.SEIKY_AMNT_CHGE_YMD, inCBSMsg.getString(JACStrConst.ECH0101CBSMSG_SEIKY_AMNT_AJST_YMD));
			}

			// 請求を取得
			CAANMsg[] result = JCHModelCommon.getSeikyUnique(inCBSMsg, inContext, seikyYm, seikyNo);

			// 請求種別コードが"4"(クレジット)の場合、フロアリミットチェックを実施する
			if (result.length > 0 && JACStrConst.SEIKY_CREDIT.equals(result[0].getString(CH0051ETMsg.SEIKY_WAY_CD)))
			{
				// フロアリミット超過フラグ
				// v24.00.00 MOD START
//				inETMsgSeiky.set(CH0051ETMsg.FLRLMT_CHOK_FLG, JCHModelCommon.execFlrlmtChk(inCBSMsg, inContext, result[0].getString(CH0051ETMsg.CRECARD_NO)));
				inETMsgSeiky.set(CH0051ETMsg.FLRLMT_CHOK_FLG, JCHModelCommon.execFlrlmtChk(inCBSMsg, inContext, result[0].getString(CH0051ETMsg.CRECARD_NO_AZKRI_ID)));
				// v24.00.00 MOD END
			}

			// 更新年月日時分秒
			inETMsgSeiky.set(CH0051ETMsg.UPD_DTM, JCHModelCommon.getSysDateTimeStamp());
			// 更新オペレータアカウント
			inETMsgSeiky.set(CH0051ETMsg.UPD_OPEACNT, inCBSMsg.getString(CH0051ETMsg.OPERATORID));

			super.update(inETMsgSeiky);
		} 
		catch (CAANException e) 
		{
			throw new CAANRuntimeException(e);
		} 
		catch (Exception e) 
		{
			throw new CAANRuntimeException(e);
		}
	}

	/**
	 * 再請求登録を行います。
	 * @param inCBSMsg 処理対象のCBSメッセージ
	 * @param inContext ディスパッチコンテキスト
	 */
	// ANK-4206-00-00 MOD START
	//public void createReSeiky(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	public void createReSeiky(CAANMsg inCBSMsg, AgentDispatchContext inContext, String gunNo, int sksHakkoSeq)
	// ANK-4206-00-00 MOD END
	{
		// CBSメッセージに設定されているリストを取得する
		CAANMsg[] inMsgList = inCBSMsg.getCAANMsgList(ECH0051D012CBSMsg.ECH0051D012CBSMSG1LIST);

		// 出力用CBSメッセージ格納リスト
		CAANMsg outMsg = null;
		CAANMsg[] outMsgList = new CAANMsg[inMsgList.length];

		// 請求（繰越元）
		CAANMsg[] motoCH0051 = null;

		// 請求契約
		CAANMsg curKK0491 = JCHModelCommon.getSeikyKeiCurrent(inCBSMsg, inContext, inCBSMsg.getString(ECH0051D012CBSMsg.SEIKY_KEI_NO));

		// 金額合計（計算用）
		long sumKingaku = 0L;

		for (int i = 0; inMsgList.length > i; i++)
		{
			if (i == 0)
			{
				// 繰越元請求年月
				String motoSeikyYm = inMsgList[i].getString(ECH0051D012CBSMsg1List.SEIKY_YM);
				// 繰越元請求番号
				String motoSeikyNo = inMsgList[i].getString(ECH0051D012CBSMsg1List.SEIKY_NO);
				// 請求を取得する
				motoCH0051 = JCHModelCommon.getSeikyUnique(inCBSMsg, inContext, motoSeikyYm, motoSeikyNo);
			}

			// CBSメッセージに設定されている金額を取得
			Long amnt = Long.parseLong(inMsgList[i].getString(ECH0051D012CBSMsg1List.AMNT));
			sumKingaku += amnt;
		}

		// 再請求する情報を設定する
		// ANK-4206-00-00 MOD START
		// setUpdateCH0051(inCBSMsg, inContext, motoCH0051[0], curKK0491, sumKingaku);
		setUpdateCH0051(inCBSMsg, inContext, motoCH0051[0], curKK0491, sumKingaku, gunNo, sksHakkoSeq);
		// ANK-4206-00-00 MOD END

		try
		{
			// 再請求登録を行います。
			super.create(motoCH0051[0]);
		}
		catch (CAANCreateException ce)
		{
			throw new CAANRuntimeException(ce);
		}

		// 出力用CBSメッセージ格納リストを設定
		for (int i = 0; inMsgList.length > i; i++)
		{
			// CBSMsgに出力項目設定
			outMsg = new CAANMsg(ECH0051D012CBSMsg.ECH0051D012CBSMSG2LIST);
			outMsg = setOutputCBSMsg(motoCH0051[0]);
			outMsgList[i] = outMsg;
		}

		inCBSMsg.set(ECH0051D012CBSMsg.ECH0051D012CBSMSG2LIST, outMsgList);
	}

	/**
	 * <p>
	 * 印刷可能な支払方法コードかチェックを行う
	 * </p>
	 * 
	 * @param inMsg 処理対象のメッセージキャリア
	 * @return true:印刷可能
	 *          false:印刷不可
	 */
	public static boolean isPayWayPossiblePrint(CAANMsg inMsg)
	{
		// 請求明細リスト取得
		CAANMsg[] msgList = inMsg.getCAANMsgList(ECH0051D012CBSMsg.ECH0051D012CBSMSG1LIST);
		
		// 請求情報取得
		CAANMsg msgCH0051 = null;
		CH0051LE le = new CH0051LE();
		
		// 印刷様式取得
		String printStyle = inMsg.getString(ECH0051D012CBSMsg.PRINT);
		
		try
		{
			for (int i = 0; msgList.length > i; i++)
			{
				msgCH0051 = new CAANMsg(CH0051ETMsg.class.getName());
				
				// 検索条件設定
				msgCH0051.set(CH0051ETMsg.SEIKY_NO, msgList[i].getObject(ECH0051D012CBSMsg1List.SEIKY_NO));
				msgCH0051.set(CH0051ETMsg.MK_FLG, JACStrConst.MK_FLG_YK);
				
				CAANMsg[] retCH0051 = le.findByCondition(msgCH0051);
				// 取得できたかチェックする
				if (retCH0051.length == 0)
				{
					throw new CAANRuntimeException();
				}
				
				// 請求方法コードを取得し、印刷可能かチェックする(PKで検索しているので1件のみ)
				String seikyWayCd = retCH0051[0].getString(CH0051ETMsg.SEIKY_WAY_CD);
				
				// 印刷様式に正しいコードが指定されているかチェックを行う
				if (!isExistPrintStyle(printStyle))
				{
					return false;
				}
				
				// 印刷可能な様式かチェックを行う
				if(!isPossiblePrint(seikyWayCd, printStyle))
				{
					// 印刷不可能な様式であればその時点でfalseを返却
					return false;
				}
			}
		}
		catch (CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}
		
		// 全て印刷可能であればtrueを返却
		return true;
	}
	
	/**
	 * <p>
	 * 収納実績が存在するかチェックを行う。
	 * リストに設定されているすべてのリストが対象
	 * </p>
	 * 
	 * @param inMsg     処理対象のメッセージキャリア
	 * @param inContext ディスパッチコンテキスト
	 * @return true:収納実績あり
	 *          false:収納実績なし
	 */
	public static boolean isExistSyunoJisseki(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// リストの情報を取得
		CAANMsg[] inMsgList = inMsg.getCAANMsgList(ECH0051D012CBSMsg.ECH0051D012CBSMSG1LIST);
		
		CAANMsg msgCH0051 = null;
		CH0051LE le = new CH0051LE();
		
		try
		{
			for (int i = 0; inMsgList.length > i; i++)
			{
				msgCH0051 = new CAANMsg(CH0051ETMsg.class.getName());
				// 検索条件の設定
				msgCH0051.set(CH0051ETMsg.SEIKY_NO, inMsgList[i].getObject(ECH0051D012CBSMsg1List.SEIKY_NO));
				msgCH0051.set(CH0051ETMsg.SEIKY_YM, inMsgList[i].getObject(ECH0051D012CBSMsg1List.SEIKY_YM));
				msgCH0051.set(CH0051ETMsg.KHRI_RSLT_CD, JACStrConst.KHRI_RSLT_CD_HRK_NOM);
				msgCH0051.set(CH0051ETMsg.MK_FLG, JACStrConst.MK_FLG_YK);
				
				// 検索条件に紐づくレコードを検索(PKで検索しているため、該当は1件)
				CAANMsg[] retCH0051 = le.findByCondition(msgCH0051);
				
				if (retCH0051.length == 0)
				{
					return false;
				}
			}
		}
		catch (CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}
		return true;
	}
	
	/**
	 * 入力情報の奇数桁と偶数桁の値の合計の算出を行います。
	 * 
	 * @param trgStr 対象文字列
	 * @return String[] 算出結果（0:奇数桁、1:偶数桁）
	 * @throws Exception 例外が発生した場合
	 */
	public String[] getDigGkData(String trgStr) throws Exception
	{
		
		// 偶数桁
		int kisu = 0;
		// 偶数桁
		int gusu = 0;
		// 対象桁の値
		int trgData = 0;
		
		// 対象文字列の桁数分以下の処理を繰り返す。
		for(int i = 0; i < trgStr.length(); i++)
		{
			// 対象桁の値を取得
			trgData = Integer.parseInt(Character.toString(trgStr.charAt(i)));
			
			// 奇数桁
			if(i % 2 == 0)
			{
				// 奇数桁の値の2倍の値が10以上の場合
				if((2 * trgData) >= 10)
				{
					// 対象桁数の一の位の値　＋　十の位の値
					kisu += (trgData * 2) % 10 + trgData * 2 / 10;
				}
				// 上記以外の場合
				else
				{
					kisu += trgData * 2;
				}
			}
			// 偶数桁
			else
			{
				gusu += trgData;
			}
		}
		
		String[] rtnData = new String[]{String.valueOf(kisu), String.valueOf(gusu)};
		
		return rtnData;
	}

	/**
	 * <p>
	 * 処理名：請求更新副次処理（入金取消）
	 * 処理概要：請求を更新する。
	 * 性能考慮により、主キー + 請求年月による更新メソッドを使用する。
	 * </p>
	 * 
	 * @param inCAANMsg CBSメッセージ
	 */
	public void executeNyukinCl(CAANMsg inCAANMsg)
	{
		try {

			// 請求
			CAANMsg inETMsgSeiky = new CAANMsg(CH0051ETMsg.class.getName());

			// キー項目を設定
			inETMsgSeiky.set(CH0051ETMsg.SEIKY_NO, inCAANMsg.getString(CH0051ETMsg.SEIKY_NO));
			inETMsgSeiky.set(CH0051ETMsg.SEIKY_YM, inCAANMsg.getString(CH0051ETMsg.SEIKY_YM));

			// 更新項目を設定
			inETMsgSeiky.set(CH0051ETMsg.SEIKY_STAT, inCAANMsg.getString(CH0051ETMsg.SEIKY_STAT));
			inETMsgSeiky.set(CH0051ETMsg.SEIKY_CL_YMD, inCAANMsg.getString(CH0051ETMsg.SEIKY_CL_YMD));
			inETMsgSeiky.set(CH0051ETMsg.UPD_DTM, JCHModelCommon.getSysDateTimeStamp());
			inETMsgSeiky.set(CH0051ETMsg.UPD_OPEACNT, inCAANMsg.getString(CH0051ETMsg.UPD_OPEACNT));

			// 請求を更新する。(主キー + 請求年月による更新)
			super.updateSeiky(inETMsgSeiky);

		} catch (CAANFinderException e) {
			
			throw new CAANRuntimeException(e);
			
		} catch (Exception e) {
			
			throw new CAANRuntimeException(e);
		}
	}

	/**
	 * 請求登録を行います。
	 * @param inCBSMsg 処理対象のCBSメッセージ
	 * @param inContext ディスパッチコンテキスト
	 */
	public void createSeiky(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		try 
		{
			CAANMsg inInsMsg = new CAANMsg(CH0051ETMsg.class.getName());
			
			// 請求番号採番
			String seikyNo = JCHejbCH0051NumberParts.getPrimarySeikyNo(inCBSMsg, inContext);
			inCBSMsg.set(ECH0101D011CBSMsg.SEIKY_NO, seikyNo);
			
			String seikyYm = inCBSMsg.getString(CH0051ETMsg.SEIKY_YM);
			inCBSMsg.set(ECH0101D011CBSMsg.SEIKY_YM, seikyYm);
			
			inInsMsg.set(CH0051ETMsg.SEIKY_NO, seikyNo);
			inInsMsg.set(CH0051ETMsg.SEIKY_STAT, JACStrConst.SEIKY_STAT_KR_FIX);                      // "010":請求ステータス（仮確定）
			inInsMsg.set(CH0051ETMsg.SEIKY_KEI_NO, inCBSMsg.getString(CH0051ETMsg.SEIKY_KEI_NO));
			inInsMsg.set(CH0051ETMsg.TOKUSOKU_NO, inCBSMsg.getString(CH0051ETMsg.TOKUSOKU_NO));
			inInsMsg.set(CH0051ETMsg.SEIKY_YM, seikyYm);
			inInsMsg.set(CH0051ETMsg.SEIKY_SBT_CD, JACStrConst.SIKYSHBTS_TEIGK_SEIKY);                // "0":請求種別コード（定例請求）
			inInsMsg.set(CH0051ETMsg.KEI_SEIKY_WAY_CD, inCBSMsg.getString(CH0051ETMsg.KEI_SEIKY_WAY_CD));
			inInsMsg.set(CH0051ETMsg.SEIKY_WAY_CD, inCBSMsg.getString(CH0051ETMsg.SEIKY_WAY_CD));
			inInsMsg.set(CH0051ETMsg.KYOSEI_MADOGUCHI_FLG, inCBSMsg.getString(CH0051ETMsg.KYOSEI_MADOGUCHI_FLG));
			inInsMsg.set(CH0051ETMsg.SKS_HAKKO_SEQ, JACStrConst.SKS_HAKKO_SEQ_INIT);                  // "00":請求書発行シーケンス（初期値）
			inInsMsg.set(CH0051ETMsg.SOHUS_AD_CD, inCBSMsg.getString(CH0051ETMsg.SOHUS_AD_CD));
			inInsMsg.set(CH0051ETMsg.SOHUS_PCD, inCBSMsg.getString(CH0051ETMsg.SOHUS_PCD));
			inInsMsg.set(CH0051ETMsg.SOHUS_STATE_NM, inCBSMsg.getString(CH0051ETMsg.SOHUS_STATE_NM));
			inInsMsg.set(CH0051ETMsg.SOHUS_CITY_NM, inCBSMsg.getString(CH0051ETMsg.SOHUS_CITY_NM));
			inInsMsg.set(CH0051ETMsg.SOHUS_OAZTSU_NM, inCBSMsg.getString(CH0051ETMsg.SOHUS_OAZTSU_NM));
			inInsMsg.set(CH0051ETMsg.SOHUS_AZCHO_NM, inCBSMsg.getString(CH0051ETMsg.SOHUS_AZCHO_NM));
			inInsMsg.set(CH0051ETMsg.SOHUS_AD_BNCHIGO, inCBSMsg.getString(CH0051ETMsg.SOHUS_AD_BNCHIGO));
			inInsMsg.set(CH0051ETMsg.SOHUS_ADRTTM, inCBSMsg.getString(CH0051ETMsg.SOHUS_ADRTTM));
			inInsMsg.set(CH0051ETMsg.SOHUS_ADRRM, inCBSMsg.getString(CH0051ETMsg.SOHUS_ADRRM));
			inInsMsg.set(CH0051ETMsg.SOHUS_TELNO, inCBSMsg.getString(CH0051ETMsg.SOHUS_TELNO));
			inInsMsg.set(CH0051ETMsg.SOHUS_NM, inCBSMsg.getString(CH0051ETMsg.SOHUS_NM));
			inInsMsg.set(CH0051ETMsg.SOHUS_BKM, inCBSMsg.getString(CH0051ETMsg.SOHUS_BKM));
			inInsMsg.set(CH0051ETMsg.SOHUS_TNTSHA_NM, inCBSMsg.getString(CH0051ETMsg.SOHUS_TNTSHA_NM));
			inInsMsg.set(CH0051ETMsg.SHS_HOJIN_SBT_CD, inCBSMsg.getString(CH0051ETMsg.SHS_HOJIN_SBT_CD));
			inInsMsg.set(CH0051ETMsg.SHS_HOJIN_ZENGO_SHITEI_CD, inCBSMsg.getString(CH0051ETMsg.SHS_HOJIN_ZENGO_SHITEI_CD));
			inInsMsg.set(CH0051ETMsg.SHS_KANA, inCBSMsg.getString(CH0051ETMsg.SHS_KANA));
			inInsMsg.set(CH0051ETMsg.SOHUS_MLAD, inCBSMsg.getString(CH0051ETMsg.SOHUS_MLAD));
			inInsMsg.set(CH0051ETMsg.SKHK_SVKEI_STAT_CD,  inCBSMsg.getString(CH0051ETMsg.SKHK_SVKEI_STAT_CD));
			inInsMsg.set(CH0051ETMsg.SKHK_SVKEI_DLRE_SKBT_CD, inCBSMsg.getString(CH0051ETMsg.SKHK_SVKEI_DLRE_SKBT_CD));
			inInsMsg.set(CH0051ETMsg.SEIKYUS_HAKKO_YH, inCBSMsg.getString(CH0051ETMsg.SEIKYUS_HAKKO_YH));
			inInsMsg.set(CH0051ETMsg.NEXT_SEIKY_WAY_DIV, inCBSMsg.getString(CH0051ETMsg.NEXT_SEIKY_WAY_DIV));
			inInsMsg.set(CH0051ETMsg.RECEIPT_AMNT_OUTPUT_UM, JACStrConst.RECEIPT_AMNT_OUTPUT_UM_NON);  // "0":領収額出力有無（無）
			inInsMsg.set(CH0051ETMsg.PAY_KIGEN_YMD, inCBSMsg.getString(CH0051ETMsg.PAY_KIGEN_YMD));
			inInsMsg.set(CH0051ETMsg.SEIKYUS_HIKINUKI_FLG, JACStrConst.HIKNK_FLG_OFF);                 // "0":引抜きフラグ（OFF）
			inInsMsg.set(CH0051ETMsg.SEIKYUS_HAKKO_TG_FLG, JACStrConst.SKS_HAK_TG_FLG_TG_GAI);         // "0":請求書発行対象フラグ（発行対象外）
			inInsMsg.set(CH0051ETMsg.SEIKY_AMNT_ADJ_YMD, JCCModelCommon.getOpeDate(inCBSMsg, null));
			
			// 請求方法コード
			String seikyWayCd = inCBSMsg.getString(CH0051ETMsg.SEIKY_WAY_CD);
			if(JACStrConst.SEIKY_KHRI.equals(seikyWayCd) || JACStrConst.SEIKY_YUFUIRI.equals(seikyWayCd))
			{
				// 判定後請求方法コード="2"（口振）または"3"（郵振）の場合
				inInsMsg.set(CH0051ETMsg.BANK_CD, inCBSMsg.getString(CH0051ETMsg.BANK_CD));
				inInsMsg.set(CH0051ETMsg.BANK_SHITEN_CD, inCBSMsg.getString(CH0051ETMsg.BANK_SHITEN_CD));
				inInsMsg.set(CH0051ETMsg.YOKIN_SHUMOKU_CD, inCBSMsg.getString(CH0051ETMsg.YOKIN_SHUMOKU_CD));
				inInsMsg.set(CH0051ETMsg.KOZA_NO, inCBSMsg.getString(CH0051ETMsg.KOZA_NO));
				inInsMsg.set(CH0051ETMsg.NEW_CD, inCBSMsg.getString(CH0051ETMsg.NEW_CD));
				inInsMsg.set(CH0051ETMsg.TSUCHO_SYMBOL, inCBSMsg.getString(CH0051ETMsg.TSUCHO_SYMBOL));
				inInsMsg.set(CH0051ETMsg.TSUCHO_NO, inCBSMsg.getString(CH0051ETMsg.TSUCHO_NO));
				inInsMsg.set(CH0051ETMsg.KOZA_MEIGIN_KANA, inCBSMsg.getString(CH0051ETMsg.KOZA_MEIGIN_KANA));
			}
			else if(JACStrConst.SEIKY_CREDIT.equals(seikyWayCd))
			{
				// 判定後請求方法コード="4"（クレジット）の場合
				inInsMsg.set(CH0051ETMsg.CRECARD_COMP_CD, inCBSMsg.getString(CH0051ETMsg.CRECARD_COMP_CD));
				inInsMsg.set(CH0051ETMsg.CRECARD_NM_KANA, inCBSMsg.getString(CH0051ETMsg.CRECARD_NM_KANA));
				inInsMsg.set(CH0051ETMsg.CRECARD_NM_ROMAJI, inCBSMsg.getString(CH0051ETMsg.CRECARD_NM_ROMAJI));
				inInsMsg.set(CH0051ETMsg.CRECARD_NO, inCBSMsg.getString(CH0051ETMsg.CRECARD_NO));
				inInsMsg.set(CH0051ETMsg.CRECARD_YK_KIGEN, inCBSMsg.getString(CH0051ETMsg.CRECARD_YK_KIGEN));
				inInsMsg.set(CH0051ETMsg.CREDIT_KOKAN_CD, inCBSMsg.getString(CH0051ETMsg.CREDIT_KOKAN_CD));
				// v24.00.00 MOD START
				inInsMsg.set(CH0051ETMsg.SHIKOSAKI_COMP_CD, inCBSMsg.getString(CH0051ETMsg.SHIKOSAKI_COMP_CD));
				inInsMsg.set(CH0051ETMsg.CRECARD_NO_AZKRI_ID, inCBSMsg.getString(CH0051ETMsg.CRECARD_NO_AZKRI_ID));
				// v24.00.00 MOD END
			}
			
			inInsMsg.set(CH0051ETMsg.FLRLMT_CHOK_FLG, JACStrConst.FLOOR_LIMIT_CHOKA_FLG_IKA);          // "0":フロアリミット超過フラグ（フロアリミット以下）
			inInsMsg.set(CH0051ETMsg.SHANAIUSE_SKBT_FLG, inCBSMsg.getString(CH0051ETMsg.SHANAIUSE_SKBT_FLG));
			
			inInsMsg.set(CH0051ETMsg.ADD_DTM, JCHModelCommon.getSysDateTimeStamp());
			inInsMsg.set(CH0051ETMsg.ADD_OPEACNT, inCBSMsg.getString(CH0051ETMsg.OPERATORID));
			inInsMsg.set(CH0051ETMsg.UPD_DTM, JCHModelCommon.getSysDateTimeStamp());
			inInsMsg.set(CH0051ETMsg.UPD_OPEACNT, inCBSMsg.getString(CH0051ETMsg.OPERATORID));
			inInsMsg.set(CH0051ETMsg.MK_FLG, JACStrConst.MK_FLG_YK);
// 20191014 ANK-3586-00-00 星野 ADD START
			// #64121 MOD START
//			inInsMsg.set(CH0051ETMsg.ORSJGS_CD, inCBSMsg.getString(CH0051ETMsg.ORSJGS_CD));
			CAANMsg[] inMsgList = inCBSMsg.getCAANMsgList(ECH0101D011CBSMsg.ECH0101D011CBSMSG7LIST);
			if (inMsgList != null && inMsgList.length > 0 && inMsgList[0] != null) {
				inInsMsg.set(CH0051ETMsg.ORSJGS_CD, inMsgList[0].getString(ECH0101D011CBSMsg7List.ORSJGS_CD));
			}
			// #64121 MOD END
			inInsMsg.set(CH0051ETMsg.KAKGT_SEIKY_SKIP_FLG, inCBSMsg.getString(CH0051ETMsg.KAKGT_SEIKY_SKIP_FLG));
// 20191014 ANK-3586-00-00 星野 ADD END
			// ANK-3838-00-00 ADD START
			inInsMsg.set(CH0051ETMsg.COMMISION_FTN_HSK_CD, inCBSMsg.getString(CH0051ETMsg.COMMISION_FTN_HSK_CD));
			inInsMsg.set(CH0051ETMsg.PKOZA_USE_KH, inCBSMsg.getString(CH0051ETMsg.PKOZA_USE_KH));
			// ANK-3838-00-00 ADD END
			
			super.create(inInsMsg);
		} 
		catch (CAANException e) 
		{
			throw new CAANRuntimeException(e);
		} 
		catch (Exception e) 
		{
			throw new CAANRuntimeException(e);
		}
	}
	
	/**
	 * 更新する請求情報を設定します。
	 * 
	 * @param msgCH0051 更新前の請求情報
	 * @param msgKK0491 カレントの請求契約情報
	 */
	@SuppressWarnings("static-access")
	// ANK-4206-00-00 MOD START
	//private static void setUpdateCH0051(CAANMsg inMsg, AgentDispatchContext inContext, CAANMsg msgCH0051, CAANMsg msgKK0491, long amnt)
	private static void setUpdateCH0051(CAANMsg inMsg, AgentDispatchContext inContext, CAANMsg msgCH0051, CAANMsg msgKK0491, long amnt, String gunNo, int sksHakkoSeq)
	// ANK-4206-00-00 MOD END
	{
		try
		{
			// 運用日
			String opeDate = JCCModelCommon.getOpeDate(inMsg, null);
			// 現在日時
			String nowTimestamp = inMsg.getString(CH0051ETMsg.OPERATEDATETIME);
			// 請求番号
			msgCH0051.set(CH0051ETMsg.SEIKY_NO, JCHejbCH0051NumberParts.getPrimarySeikyNo(inMsg, inContext));
			// 請求種別コード
			msgCH0051.set(CH0051ETMsg.SEIKY_SBT_CD, SEIKY_SBT_CD_SAIHAKKO);
			// 強制窓口フラグ
			msgCH0051.set(CH0051ETMsg.KYOSEI_MADOGUCHI_FLG, KYOSEI_MADOGUCHI_FLG_RELEASE);
			// 支払期限年月日
			msgCH0051.set(CH0051ETMsg.PAY_KIGEN_YMD, inMsg.getString(ECH0051D012CBSMsg.PAY_KIGEN_YMD));
			// 送付先住所コード
			msgCH0051.set(CH0051ETMsg.SOHUS_AD_CD, msgKK0491.getString(KK0491ETMsg.SOHUS_AD_CD));
			// 送付先郵便番号
			msgCH0051.set(CH0051ETMsg.SOHUS_PCD, msgKK0491.getString(KK0491ETMsg.SOHUS_PCD));
			// 送付先都道府県名
			msgCH0051.set(CH0051ETMsg.SOHUS_STATE_NM, msgKK0491.getString(KK0491ETMsg.SOHUS_STATE_NM));
			// 送付先市区町村名
			msgCH0051.set(CH0051ETMsg.SOHUS_CITY_NM, msgKK0491.getString(KK0491ETMsg.SOHUS_CITY_NM));
			// 送付先大字通称名
			msgCH0051.set(CH0051ETMsg.SOHUS_OAZTSU_NM, msgKK0491.getString(KK0491ETMsg.SOHUS_OAZTSU_NM));
			// 送付先字丁目名
			msgCH0051.set(CH0051ETMsg.SOHUS_AZCHO_NM, msgKK0491.getString(KK0491ETMsg.SOHUS_AZCHO_NM));
			// 送付先住所番地号
			msgCH0051.set(CH0051ETMsg.SOHUS_AD_BNCHIGO, msgKK0491.getString(KK0491ETMsg.SOHUS_BNCHIGO));
			// 送付先住所補記・建物名
			msgCH0051.set(CH0051ETMsg.SOHUS_ADRTTM, msgKK0491.getString(KK0491ETMsg.SOHUS_ADRTTM));
			// 送付先住所補記・部屋番号
			msgCH0051.set(CH0051ETMsg.SOHUS_ADRRM, msgKK0491.getString(KK0491ETMsg.SOHUS_ADRRM));
			// 送付先電話番号
			msgCH0051.set(CH0051ETMsg.SOHUS_TELNO, msgKK0491.getString(KK0491ETMsg.SOHUS_TELNO));
			// 送付先名
			msgCH0051.set(CH0051ETMsg.SOHUS_NM, msgKK0491.getString(KK0491ETMsg.SOHUS_NM));
			// 送付先メールアドレス
			msgCH0051.set(CH0051ETMsg.SOHUS_MLAD, msgKK0491.getString(KK0491ETMsg.SOHUS_MLAD));
			// 請求書発行年月日
			msgCH0051.set(CH0051ETMsg.SEIKYUS_HAKKO_YMD, opeDate);

			// 請求年月
			String seikyYm = msgCH0051.getString(CH0051ETMsg.SEIKY_YM);
			// 請求契約番号
			String seikyKeiNo = inMsg.getString(ECH0051D012CBSMsg.SEIKY_KEI_NO);
			// 発行シーケンス
			// ANK-4206-00-00 DEL START
			//int sksHakkoSeq = JCHCommonFormatUtil.getSksHakkoSeq(seikyKeiNo, seikyYm, opeDate);
			// ANK-4206-00-00 DEL END
			
			// 発行シーケンス
			msgCH0051.set(CH0051ETMsg.SKS_HAKKO_SEQ, JPCUtilCommon.fillZero(Integer.toString(sksHakkoSeq), 2 ,false));

			// 印刷様式
			String printDiv = inMsg.getString(ECH0051D012CBSMsg.PRINT);

			// 印刷様式コード(窓口支払)の場合
			// ANK-3838-00-00 MOD START
			//if (JACStrConst.PRINT_YSK_CD_MADO.equals(printDiv))
			if (JACStrConst.PRINT_YSK_CD_MADO.equals(printDiv) || JACStrConst.PRINT_YSK_CD_MADO_CUST.equals(printDiv))
			// ANK-3838-00-00 MOD END
			{
				// 請求依頼年月日
				msgCH0051.set(CH0051ETMsg.SEIKY_REQ_YMD, opeDate);
				// バーコード様式種別
				String barcodeSbt = inMsg.getString(ECH0051D012CBSMsg.BARCODE_CD);
				// 支払期限日
				String tratLimitYmd = inMsg.getString(ECH0051D012CBSMsg.TORI_KIGEN_YMD);
				// ANK-3838-00-00 ADD START
				// 手数料負担方式コード
				String commisionFtnHskCd = inMsg.getString(ECH0051D012CBSMsg.COMMISION_FTN_HSK_CD);
				msgCH0051.set(CH0051ETMsg.COMMISION_FTN_HSK_CD, commisionFtnHskCd);
				// パーフェクト口座利用可否
				msgCH0051.set(CH0051ETMsg.PKOZA_USE_KH, inMsg.getString(ECH0051D012CBSMsg.PKOZA_USE_KH));
				// ANK-3838-00-00 ADD END
				
				JCHCommonFormatUtil chComFmtUtil = new JCHCommonFormatUtil();
				// EANバーコード情報取得
				// ANK-3838-00-00 MOD START
				//ArrayList<String> eanInfoList = chComFmtUtil.getEanInf(null, seikyYm, seikyKeiNo, Integer.toString(sksHakkoSeq), barcodeSbt, tratLimitYmd, JACStrConst.KARA_MOJI, amnt, opeDate);
				// ANK-4206-00-00 MOD START
				//ArrayList<String> eanInfoList = chComFmtUtil.getEanInf(null, seikyYm, seikyKeiNo, Integer.toString(sksHakkoSeq), barcodeSbt, tratLimitYmd, JACStrConst.KARA_MOJI, amnt, opeDate, commisionFtnHskCd);
				ArrayList<String> eanInfoList = chComFmtUtil.getEanInf(null, seikyYm, seikyKeiNo, Integer.toString(sksHakkoSeq), barcodeSbt, tratLimitYmd, JACStrConst.KARA_MOJI, amnt, opeDate, commisionFtnHskCd , gunNo);
				// ANK-4206-00-00 MOD END
				// ANK-3838-00-00 MOD END
				// OCRバーコード情報取得
				// ANK-4206-00-00 MOD START
				//ArrayList<String> ocrInfoList = chComFmtUtil.getOcrInf(seikyYm, seikyKeiNo, sksHakkoSeq, amnt, opeDate);
				ArrayList<String> ocrInfoList = chComFmtUtil.getOcrInf(seikyYm, seikyKeiNo, sksHakkoSeq, amnt, opeDate, gunNo);
				// ANK-4206-00-00 MOD END
				// EANバーコード
				msgCH0051.set(CH0051ETMsg.EAN_BARCODE, listToString(eanInfoList));
				// EANメーカーコード
				msgCH0051.set(CH0051ETMsg.EAN_MAKER_CD, inMsg.getString(ECH0051D012CBSMsg.BARCODE_CD));
				// EAN取扱い期限年月日
				msgCH0051.set(CH0051ETMsg.EAN_TRAT_LIMIT_YMD, inMsg.getString(ECH0051D012CBSMsg.TORI_KIGEN_YMD));
				// OCRバーコード
				msgCH0051.set(CH0051ETMsg.OCR_BARCODE, listToString(ocrInfoList));
				// 請求方法
				msgCH0051.set(CH0051ETMsg.SEIKY_WAY_CD, SEIKY_WAY_CD_MADOGUCHI);
			}

			// 印刷様式コード(クレジット)の場合
			if (JACStrConst.PRINT_YSK_CD_CRDT.equals(printDiv))
			{
				// バーコード様式種別
				String pcd = msgKK0491.getString(KK0491ETMsg.SOHUS_PCD);
				String adrr1 = msgKK0491.getString(KK0491ETMsg.SOHUS_OAZTSU_NM);
				String adrr2 = msgKK0491.getString(KK0491ETMsg.SOHUS_AZCHO_NM);
				String adrr3 = msgKK0491.getString(KK0491ETMsg.SOHUS_BNCHIGO);
				String adrr4 = msgKK0491.getString(KK0491ETMsg.SOHUS_ADRTTM);
				String adrr5 = msgKK0491.getString(KK0491ETMsg.SOHUS_ADRRM);

				// カスタマバーコードリスト取得
				JCHCommonBarcodeEdit commonBarcodeEdiCst = new JCHCommonBarcodeEdit();

				List<String> customerBarcodeList = 
					commonBarcodeEdiCst.getCustomerBarcode(pcd, adrr1, adrr2, adrr3, adrr4, adrr5);

				// カスタマバーコードリストを連結して文字列に編集
				StringBuilder sbCustBcd = new StringBuilder();
				
				if (customerBarcodeList != null && !customerBarcodeList.isEmpty())
				{
					// カスタマスタートビット
					sbCustBcd.append(customerBarcodeList.get(0));
					// カスタマ送付先郵便番号
					sbCustBcd.append(customerBarcodeList.get(1));
					// カスタマ送付先住所コード
					sbCustBcd.append(customerBarcodeList.get(2));
					// カスタマチェックデジット
					sbCustBcd.append(customerBarcodeList.get(3));
					// カスタマストップビットコード
					sbCustBcd.append(customerBarcodeList.get(4));
				}
				String editCustomerBarCd = sbCustBcd.toString();

				// カスタマーバーコード
				msgCH0051.set(CH0051ETMsg.CUSTOMER_BARCODE, editCustomerBarCd);
			}

			// 登録年月日時分秒
			msgCH0051.set(CH0051ETMsg.ADD_DTM, nowTimestamp);
			// 登録オペレータアカウント
			msgCH0051.set(CH0051ETMsg.ADD_OPEACNT, inMsg.getString(ECH0051D012CBSMsg.OPERATORID));
			// 更新年月日時分秒
			msgCH0051.set(CH0051ETMsg.UPD_DTM, nowTimestamp);
			// 更新オペレータアカウント
			msgCH0051.set(CH0051ETMsg.UPD_OPEACNT, inMsg.getString(ECH0051D012CBSMsg.OPERATORID));
			// 削除年月日時分秒
			msgCH0051.set(CH0051ETMsg.DEL_DTM, STR_NULL);
			// 削除オペレータアカウント
			msgCH0051.set(CH0051ETMsg.DEL_OPEACNT, STR_NULL);
		}
		catch (Exception ex)
		{
			throw new CAANRuntimeException(ex);
		}
	}
	
	/**
	 * <p>
	 * 出力する項目の設定を行う
	 * </p>
	 * 
	 * @param trgOutMsg 出力する情報が設定されたメッセージキャリア
	 * @return 出力項目が設定されたメッセージキャリア
	 */
	private CAANMsg setOutputCBSMsg(CAANMsg trgOutMsg)
	{
		CAANMsg outMsg = new CAANMsg(ECH0051D012CBSMsg2List.class.getName());
		
		// 請求番号
		outMsg.set(ECH0051D012CBSMsg2List.SEIKY_NO_O, trgOutMsg.getObject(CH0051ETMsg.SEIKY_NO));
		// 強制窓口フラグ
		outMsg.set(ECH0051D012CBSMsg2List.KYOSEI_MADOGUCHI_FLG, trgOutMsg.getObject(CH0051ETMsg.KYOSEI_MADOGUCHI_FLG));
		// 請求依頼年月日
		outMsg.set(ECH0051D012CBSMsg2List.SEIKY_REQ_YMD, trgOutMsg.getObject(CH0051ETMsg.SEIKY_REQ_YMD));
		// 請求書発行シーケンス
		outMsg.set(ECH0051D012CBSMsg2List.SKS_HAKKO_SEQ, trgOutMsg.getObject(CH0051ETMsg.SKS_HAKKO_SEQ));
		// 請求書発行年月日
		outMsg.set(ECH0051D012CBSMsg2List.SKS_HAKKO_YMD, trgOutMsg.getObject(CH0051ETMsg.SEIKYUS_HAKKO_YMD));
		// EANバーコード
		outMsg.set(ECH0051D012CBSMsg2List.EAN_BARCODE, trgOutMsg.getObject(CH0051ETMsg.EAN_BARCODE));
		// EANメーカーコード
		outMsg.set(ECH0051D012CBSMsg2List.EAN_MAKER_CD, trgOutMsg.getObject(CH0051ETMsg.EAN_MAKER_CD));
		// EAN取扱い期限年月日
		outMsg.set(ECH0051D012CBSMsg2List.EAN_TRAT_LIMIT_YMD, trgOutMsg.getObject(CH0051ETMsg.EAN_TRAT_LIMIT_YMD));
		// OCR番号
		outMsg.set(ECH0051D012CBSMsg2List.OCR_BARCODE, trgOutMsg.getObject(CH0051ETMsg.OCR_BARCODE));
		// 登録年月日時分秒
		outMsg.set(ECH0051D012CBSMsg2List.ADD_DTM, trgOutMsg.getObject(CH0051ETMsg.ADD_DTM));
		// 登録オペレータアカウント
		outMsg.set(ECH0051D012CBSMsg2List.ADD_OPEACNT, trgOutMsg.getObject(CH0051ETMsg.ADD_OPEACNT));
		// 更新年月日時分秒
		outMsg.set(ECH0051D012CBSMsg2List.UPD_DTM, trgOutMsg.getObject(CH0051ETMsg.UPD_DTM));
		// 更新オペレータアカウント
		outMsg.set(ECH0051D012CBSMsg2List.UPD_OPEACNT, trgOutMsg.getObject(CH0051ETMsg.UPD_OPEACNT));
		
		return outMsg;
	}
	
	/**
	 * <p>
	 * 指定された印刷様式のコードが「窓口」、「口座振替」、
	 * 「クレジット」、「口振領収書のみ」かチェックを行う
	 * </p>
	 * 
	 * @param printStyleCd 印刷様式コード
	 * @return true:存在するコード
	 *          false:存在しないコード
	 */
	private static boolean isExistPrintStyle(String printStyleCd)
	{
		if (!PRINT_STYLE_CD_MADOGUCHI.equals(printStyleCd)
				&& !PRINT_STYLE_CD_KOUZA.equals(printStyleCd)
				&& !PRINT_STYLE_CD_CREDIT.equals(printStyleCd)
				// ANK-3838-00-00 MOD START
				//&& !PRINT_STYLE_CD_ONLY_RECIPT.equals(printStyleCd))
				&& !PRINT_STYLE_CD_ONLY_RECIPT.equals(printStyleCd)
				&& !PRINT_STYLE_CD_MADOGUCHI_CUST.equals(printStyleCd))
				// ANK-3838-00-00 MOD END
		{
			return false;
		}
		
		return true;
	}
	
	/**
	 * <p>
	 * 印刷可能な印刷様式かチェックを行う
	 * </p>
	 * 
	 * @param seikyWayCd 請求方法コード
	 * @param printStyle 印刷様式
	 * 
	 * @return true:印刷可能
	 *          false:印刷不可
	 */
	private static boolean isPossiblePrint(String seikyWayCd, String printStyle)
	{
		// 印刷様式が窓口以外 かつ 窓口_顧客負担以外の場合、コード値のチェックを行う
		// ANK-3838-00-00 MOD START
		//if (!PRINT_STYLE_CD_MADOGUCHI.equals(printStyle))
		if (!PRINT_STYLE_CD_MADOGUCHI.equals(printStyle) && !PRINT_STYLE_CD_MADOGUCHI_CUST.equals(printStyle))
		// ANK-3838-00-00 MOD END
		{
			// 印刷様式に従い、それぞれ請求方法コードをチェックする
			if (PRINT_STYLE_CD_KOUZA.equals(printStyle)
					|| PRINT_STYLE_CD_ONLY_RECIPT.equals(printStyle))
			{
				// 口座振替、郵便自動振替の場合、「口座振替」、「口振領収書のみ」以外NG
				if (!SEIKY_WAY_CD_KOUZA.equals(seikyWayCd)
						&& !SEIKY_WAY_CD_AUTO_POST.equals(seikyWayCd))
				{
					return false;
				}
			}
			else if (PRINT_STYLE_CD_CREDIT.equals(printStyle))
			{
				// クレジットの場合、「クレジット」以外はNG
				if (!SEIKY_WAY_CD_CREDIT.equals(seikyWayCd))
				{
					return false;
				}
			}
			else
			{
				// 存在しない印刷様式の場合、NG
				return false;
			}
		}
		
		return true;
	}
	
	/**
	 * <p>
	 * EANバーコードを取得します。
	 * </p>
	 * 
	 * @param eanInfoList EANバーコード情報が設定されたリスト
	 * 
	 * @return EANバーコード
	 */
	private static String listToString(ArrayList<String> strList)
	{
		StringBuffer sb = new StringBuffer();
		
		// Listに設定されたEANバーコード情報を生成する
		for(String str : strList)
		{
			sb.append(str);
		}
		
		return sb.toString();
	}

}
