Модификация приходящего платежа (снятие процента)

Материал из BiTel WiKi

Перейти к: навигация, поиск

Динамический код на событие "приход платежа". Позволяет снять с приходящего платежа процент. В данном примере снимается 5% за платежи, приходящие через систему Assist.

package ru.qwerty;
 
import java.math.BigDecimal;
import java.sql.Connection;
 
import ru.bitel.bgbilling.kernel.contract.balance.common.bean.Payment;
import ru.bitel.bgbilling.kernel.contract.balance.server.bean.PaymentDao;
import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase;
import ru.bitel.bgbilling.server.util.ServerUtils;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
import bitel.billing.server.contract.bean.BalanceUtils;
import bitel.billing.server.contract.bean.Contract;
import bitel.billing.server.contract.bean.ContractManager;
 
/**
 * Событие на приход платежа (асинхронное).
 * Вычитает из платежа нужный процент и модифицирует комментарий.
 * @author dimon
 */
public class AssistPayment
	extends EventScriptBase<ru.bitel.bgbilling.kernel.contract.balance.server.event.PaymentEvent>
{
	/** тип платежа, который будет обрабатываться */
	private static int PAYMENT_TYPE = 33;
	/** множитель суммы платежа */
	private static BigDecimal MULTIPLIER = new BigDecimal("0.95");
	/** шаблон комментария платежа (первый параметр %s - оригинальная сумма, второй - оригинальный комментарий, знак процента должен дублироваться) */
	private static String COMMENT = "Платёж %s р. (комиссия 5%%) - %s";
 
	@Override
	public void onEvent( ru.bitel.bgbilling.kernel.contract.balance.server.event.PaymentEvent event, Setup setup, ConnectionSet connectionSet )
		throws Exception
	{
		Payment contractPayment = event.getPayment();
		if( contractPayment.getTypeId() == PAYMENT_TYPE && !event.isEditMode() )
		{
			Connection con = connectionSet.getConnection();
 
			BigDecimal originalSumm = contractPayment.getSum();
			String originalComment = contractPayment.getComment();
 
			contractPayment.setSum(originalSumm.multiply(MULTIPLIER));
			contractPayment.setComment(String.format(COMMENT, originalSumm, originalComment));
 
			new PaymentDao( con ).update( contractPayment );
			// обновление баланса
			Contract contract = new ContractManager( con ).getContractById( contractPayment.getContractId() );
			ServerUtils.commitConnection( con ); // во избежание косяка с необновлением баланса при параллельных транзакциях коммитим после изменения платежа/расхода {213fc512-b1b2-4787-926c-a5bc44eb615a}
			new BalanceUtils( con ).updateBalance( contractPayment.getDate(), contract );
			ServerUtils.commitConnection( con );
			//EventProcessor.getInstance().publish( new PaymentEvent( User.USER_SERVER, contractPayment ) );
			//EventProcessor.getInstance().publish( new ContractBalanceChangedEvent( contract.getId(), contractPayment.getSum() ) );
		}
	}
}
Личные инструменты