⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mpayment.java

📁 Java写的ERP系统
💻 JAVA
📖 第 1 页 / 共 4 页
字号:

	/**
	 * 	Get Trx Type
	 * 	@return TrxType
	 */
	public String getTrxType()
	{
		return (String)getValue("TrxType");
	}	//	getTrxType

	/**
	 *  Set Bank Account for Payment.
	 *  @param C_BankAccount_ID C_BankAccount_ID
	 */
	public void setC_BankAccount_ID (int C_BankAccount_ID)
	{
		if (C_BankAccount_ID == 0)
		{
			setPaymentProcessor();
			if (getC_BankAccount_ID() == 0)
				throw new IllegalArgumentException("MPayment.setC_BankAccount_ID - can't find Bank Account");
		}
		else
			setValue ("C_BankAccount_ID", new Integer(C_BankAccount_ID));
	}	//	setC_BankAccount_ID

	/**
	 * 	Get Bank Account
	 *  @return C_BankAccount_ID
	 */
	public int getC_BankAccount_ID()
	{
		Integer ii = (Integer)getValue("C_BankAccount_ID");
		if (ii == null)
			return 0;
		return ii.intValue();
	}	//	getC_BankAccount_ID

	/**
	 *  Set BankAccount and PaymentProcessor
	 *  @return true if found
	 */
	public boolean setPaymentProcessor ()
	{
		return setPaymentProcessor (getTenderType(), getCreditCardType());
	}	//	setPaymentProcessor

	/**
	 *  Set BankAccount and PaymentProcessor
	 *  @param tender TenderType see TENDER_
	 *  @param CCType CC Type see CC_
	 *  @return true if found
	 */
	public boolean setPaymentProcessor (String tender, String CCType)
	{
		m_mpp = findPaymentProcessor (getCtx(), tender, CCType, getAD_Client_ID(),
			getC_Currency_ID(), getPayAmt());
		if (m_mpp != null)
			setC_BankAccount_ID (m_mpp.getC_BankAccount_ID());
		//
		return m_mpp != null;
	}   //  setPaymentProcessor

	/**
	 * 	Get BankAccount & PaymentProcessor
	 * 	@param ctx context
	 *  @param tender Tender see TENDER_
	 *  @param CCType CC Type see CC_
	 *  @param AD_Client_ID Client
	 *  @param C_Currency_ID Currency (ignored)
	 *  @param Amt Amount (ignored)
	 *  @return Array of BankAccount[0] & PaymentProcessor[1] or null
	 */
	public static int findBankAccount (Properties ctx,
		String tender, String CCType,
		int AD_Client_ID, int C_Currency_ID, BigDecimal Amt)
	{
		MPaymentProcessor mpp = findPaymentProcessor(ctx,
			tender, CCType, AD_Client_ID, C_Currency_ID, Amt);
		if (mpp == null)
			return 0;
		return mpp.getC_BankAccount_ID();
	}	//	findBankAccount

	/**
	 * 	Get BankAccount & PaymentProcessor
	 * 	@param ctx context
	 *  @param tender Tender see TENDER_
	 *  @param CCType CC Type see CC_
	 *  @param AD_Client_ID Client
	 *  @param C_Currency_ID Currency (ignored)
	 *  @param Amt Amount (ignored)
	 *  @return Array of BankAccount[0] & PaymentProcessor[1] or null
	 */
	protected static MPaymentProcessor findPaymentProcessor (Properties ctx,
		String tender, String CCType,
		int AD_Client_ID, int C_Currency_ID, BigDecimal Amt)
	{
		StringBuffer sql = new StringBuffer("SELECT * "
			+ "FROM C_PaymentProcessor "
			+ "WHERE AD_Client_ID=? AND IsActive='Y'");
		if (tender.equals(TENDER_ACH))
			sql.append(" AND AcceptACH='Y'");
		else if (tender.equals(TENDER_CHECK))
			sql.append(" AND AcceptCheck='Y'");
		//  CreditCards
		else if (CCType.equals(CC_AMEX))
			sql.append(" AND AcceptAMEX='Y'");
		else if (CCType.equals(CC_DINERS))
			sql.append(" AND AcceptDiners='Y'");
		else if (CCType.equals(CC_DISCOVER))
			sql.append(" AND AcceptDiscover='Y'");
		else if (CCType.equals(CC_MASTERCARD))
			sql.append(" AND AcceptMC='Y'");
		else if (CCType.equals(CC_PURCHASE))
			sql.append(" AND AcceptCORPORATE='Y'");
		else if (CCType.equals(CC_VISA))
			sql.append(" AND AcceptVISA='Y'");
		//
	//	sql.append(" AND (C_Currency_ID IS NULL OR C_Currency_ID=?)");
		MPaymentProcessor retValue = null;
		try
		{
			PreparedStatement pstmt = DB.prepareStatement(sql.toString());
			pstmt.setInt(1, AD_Client_ID);
		//	pstmt.setInt(2, C_Currency_ID);
			ResultSet rs = pstmt.executeQuery();
			if (rs.next())
				retValue = new MPaymentProcessor (ctx, rs);
			else
				s_log.warn("findPaymentProcessor - no found - " + sql + ", AD_Client_ID=" + AD_Client_ID);
			rs.close();
			pstmt.close();
		}
		catch (SQLException e)
		{
			s_log.error("findPaymentProcessor", e);
			return null;
		}
		return retValue;
	}   //  findPaymentProcessor

	/*************************************************************************/

	/**
	 *  Set Tender Type if valid
	 *  @param TenderType Tender Type see TENDER_
	 */
	public void setTenderType (String TenderType)
	{
		if (TenderType == null)
			return;
		if (TenderType.equals(TENDER_ACH)
				|| TenderType.equals(TENDER_CHECK)
				|| TenderType.equals(TENDER_CREDITCARD))
			setValue ("TenderType", TenderType);
	}	//	setTenderType

	/**
	 * 	Get Tender Type.
	 *  See TENDER_
	 *  @return Tender Type
	 */
	public String getTenderType()
	{
		return (String)getValue("TenderType");
	}	//	getTenderYupe

	/**
	 *  Set Credit Card if valid
	 *
	 *  @param CreditCardType credit card type see CC_
	 */
	public void setCreditCardType (String CreditCardType)
	{
		if (CreditCardType == null)
			return;
		if (CreditCardType.equals(CC_AMEX)
				||  CreditCardType.equals(CC_DINERS)
				||  CreditCardType.equals(CC_DISCOVER)
				||  CreditCardType.equals(CC_MASTERCARD)
				||  CreditCardType.equals(CC_PURCHASE)
				||  CreditCardType.equals(CC_VISA))
			setValue ("CreditCardType", CreditCardType);
	}	//	setCreditCardType

	/**
	 * 	Get Credit Card Type
	 *  @return Credit Card Type see CC_
	 */
	public String getCreditCardType()
	{
		return (String)getValue("CreditCardType");
	}	//	getCreditCardType

	/*************************************************************************/

	/**
	 *  Credit Card Number
	 *  @param CreditCardNumber CreditCard Number
	 */
	public void setCreditCardNumber (String CreditCardNumber)
	{
		setValue("CreditCardNumber", checkNumeric(CreditCardNumber));
	}	//	setCreditCardNumber

	/**
	 *  Get Credit Card Number
	 *  @return CC Number
	 */
	public String getCreditCardNumber()
	{
		return (String)getValue("CreditCardNumber");
	}	//	getCreditCardNumber

	/**
	 *  Validate Credit Card Number.
	 *  - Based on LUHN formula
	 *  @param creditCardNumber credit card number
	 *  @return "" or Error AD_Message
	 */
	public static String validateCreditCardNumber (String creditCardNumber)
	{
		if (creditCardNumber == null || creditCardNumber.length() == 0)
			return "CreditCardNumberError";

		/**
		 *  1:  Double the value of alternate digits beginning with
		 *      the	first right-hand digit (low order).
		 *  2:  Add the individual digits comprising the products
		 *      obtained in step 1 to each of the unaffected digits
		 *      in the original number.
		 *  3:  Subtract the total obtained in step 2 from the next higher
		 *      number ending in 0 [this in the equivalent of calculating
		 *      the "tens complement" of the low order digit (unit digit)
		 *      of the total].
		 *      If the total obtained in step 2 is a number ending in zero
		 *      (30, 40 etc.), the check digit is 0.
		 *  Example:
		 *  Account number: 4992 73 9871 6
		 *
		 *  4  9  9  2  7  3  9  8  7  1  6
		 *    x2    x2    x2    x2    x2
		 *  -------------------------------
		 *  4 18  9  4  7  6  9 16  7  2  6
		 *
		 *  4 + 1 + 8 + 9 + 4 + 7 + 6 + 9 + 1 + 6 + 7 + 2 + 6 = 70
		 *  70 % 10 = 0
		 */

		//  Clean up number
		String ccNumber1 = checkNumeric(creditCardNumber);
		int ccLength = ccNumber1.length();
		//  Reverse string
		StringBuffer buf = new StringBuffer();
		for (int i = ccLength; i != 0; i--)
			buf.append(ccNumber1.charAt(i-1));
		String ccNumber = buf.toString();

		int sum = 0;
		for (int i = 0; i < ccLength; i++)
		{
			int digit = Character.getNumericValue(ccNumber.charAt(i));
			if (i % 2 == 1)
			{
				digit *= 2;
				if (digit > 9)
					digit -= 9;
			}
			sum += digit;
		}
		if (sum % 10 == 0)
			return "";

		s_log.debug("validateCreditCardNumber - " + creditCardNumber + " -> "
			+ ccNumber + ", Luhn=" + sum);
		return "CreditCardNumberError";
	}   //  validateCreditCardNumber

	/**
	 *  Validate Credit Card Number.
	 *  - Check Card Type and Length
	 *  @param creditCardNumber CC Number
	 *  @param creditCardType CC Type
	 *  @return "" or Error AD_Message
	 */
	public static String validateCreditCardNumber (String creditCardNumber, String creditCardType)
	{
		if (creditCardNumber == null || creditCardType == null)
			return "CreditCardNumberError";

		//  http://www.beachnet.com/~hstiles/cardtype.html
		//	http://staff.semel.fi/~kribe/document/luhn.htm

		String ccStartList = "";    //  comma separated list of starting numbers
		String ccLengthList = "";   //  comma separated list of lengths
		//
		if (creditCardType.equals(CC_MASTERCARD))
		{
			ccStartList = "51,52,53,54,55";
			ccLengthList = "16";
		}
		else if (creditCardType.equals(CC_VISA))
		{
			ccStartList = "4";
			ccLengthList = "13,16";
		}
		else if (creditCardType.equals(CC_AMEX))
		{
			ccStartList = "34,37";
			ccLengthList = "15";
		}
		else if (creditCardType.equals(CC_AMEX))
		{
			ccStartList = "30,36,38";
			ccLengthList = "14";
		}
		else if (creditCardType.equals(CC_DISCOVER))
		{
			ccStartList = "6011";
			ccLengthList = "16";
		}
		else if (creditCardType.equals(CC_DINERS))
		{
			ccStartList = "300,301,302,303,304,305,36,38";
			ccLengthList = "14";
		}
		else
		{
			//  enRouteCard
			ccStartList = "2014,2149";
			ccLengthList = "15";
			//  JCBCard
			ccStartList += ",3088,3096,3112,3158,3337,3528";
			ccLengthList += ",16";
			//  JCBCard
			ccStartList += ",2131,1800";
			ccLengthList += ",15";
		}

		//  Clean up number
		String ccNumber = checkNumeric(creditCardNumber);

		/**
		 *  Check Length
		 */
		int ccLength = ccNumber.length();
		boolean ccLengthOK = false;
		StringTokenizer st = new StringTokenizer(ccLengthList, ",", false);
		while (st.hasMoreTokens() && !ccLengthOK)
		{
			int l = Integer.parseInt(st.nextToken());
			if (ccLength == l)
				ccLengthOK = true;
		}
		if (!ccLengthOK)
		{
			s_log.debug("validateCreditCardNumber Length="
				+ ccLength + " <> " + ccLengthList);
			return "CreditCardNumberError";
		}

		/**
		 *  Check Start Digits
		 */
		boolean ccIdentified = false;
		st = new StringTokenizer(ccStartList, ",", false);
		while (st.hasMoreTokens() && !ccIdentified)
		{
			if (ccNumber.startsWith(st.nextToken()))
				ccIdentified = true;
		}
		if (!ccIdentified)
			s_log.debug("validateCreditCardNumber Type="
				+ creditCardType + " <> " + ccStartList);

		//
		String check = validateCreditCardNumber(ccNumber);
		if (check.length() != 0)
			return check;
		if (!ccIdentified)
			return "CreditCardNumberProblem?";
		return "";
	}   //  validateCreditCardNumber

	/*************************************************************************/

	/**
	 *  Verification Code
	 *  @param newCreditCardVV CC verification
	 */
	public void setCreditCardVV(String newCreditCardVV)
	{
		setValue ("CreditCardVV", checkNumeric(newCreditCardVV));
	}	//	setCreditCardVV

	/**
	 * 	Get CC Verification Code
	 * 	@return CC Verification Code
	 */
	public String getCreditCardVV()
	{
		return (String)getValue("CreditCardVV");
	}	//	getCreditCardVV


	/**
	 *  Validate Validation Code
	 *  @param creditCardVV CC Verification Code
	 *  @return "" or Error AD_Message
	 */
	public static String validateCreditCardVV (String creditCardVV)
	{
		if (creditCardVV == null)
			return "";
		int length = checkNumeric(creditCardVV).length();
		if (length == 3 || length == 4)
			return "";
		try
		{
			Integer.parseInt (creditCardVV);
			return "";
		}
		catch (NumberFormatException ex)
		{
			s_log.debug("validateCreditCardVV - " + ex);
		}
		s_log.debug("validateCreditCardVV - length=" + length);
		return "CreditCardVVError";
	}   //  validateCreditCardVV

	/**
	 *  Validate Validation Code
	 *  @param creditCardVV CC Verification Code
	 *  @param creditCardType CC Type see CC_
	 *  @return "" or Error AD_Message
	 */
	public static String validateCreditCardVV (String creditCardVV, String creditCardType)
	{
		//	no data
		if (creditCardVV == null || creditCardVV.length() == 0
			|| creditCardType == null || creditCardType.length() == 0)
			return "";

		int length = checkNumeric(creditCardVV).length();

		//	Amex = 4 digits
		if (creditCardType.equals(CC_AMEX))
		{
			if (length == 4)
			{
				try
				{
					Integer.parseInt (creditCardVV);
					return "";
				}
				catch (NumberFormatException ex)
				{
					s_log.debug("validateCreditCardVV - " + ex);
				}
			}
			s_log.debug("validateCreditCardVV(4) CC=" + creditCardType + ", length=" + length);
			return "CreditCardVVError";
		}
		//	Visa & MasterCard - 3 digits
		if (creditCardType.equals(CC_VISA) || creditCardType.equals(CC_MASTERCARD))
		{
			if (length == 3)
			{
				try
				{
					Integer.parseInt (creditCardVV);
					return "";
				}
				catch (NumberFormatException ex)
				{
					s_log.debug("validateCreditCardVV - " + ex);
				}
			}
			s_log.debug("validateCreditCardVV(3) CC=" + creditCardType + ", length=" + length);
			return "CreditCardVVError";
		}

		//	Other
		return "";
	}   //  validateCreditCardVV

	/*************************************************************************/

	/**
	 *  Two Digit CreditCard MM
	 *  @param CreditCardExpMM Exp month
	 *  @return true if valid
	 */
	public boolean setCreditCardExpMM (int CreditCardExpMM)
	{
		if (CreditCardExpMM < 1 || CreditCardExpMM > 12)
			return false;
		setValue ("CreditCardExpMM", new Integer (CreditCardExpMM));
		return true;
	}	//	setCreditCardExpMM

	/**
	 * 	Get Exp month
	 *  @return Exp month
	 */
	public int getCreditCardExpMM()
	{
		Integer ii = (Integer)getValue("CreditCardExpMM");
		if (ii == null)
			return 0;
		return ii.intValue();
	}	//	getCreditCardExpMM

	/**
	 *  Two digit CreditCard YY (til 2020)
	 *  @param newCreditCardExpYY 2 or 4 digit year
	 *  @return true if valid
	 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -