...
Блок кода | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
public class DebtorsTableResult extends AssistantActionBase { @Override public AssistantResponse showAction( AssistantRequest assistantRequest1 ) throws BGException, BGMessageException { this.assistantRequest = assistantRequest1; //получение введённых данных из предыдущего мастера JSONObject data = assistantRequest.getData().getJSONObject( "fields" ); int balanceLimit = Integer.parseInt( data.getString( "correctSum" ) ); LocalDate searchDate = LocalDate.parse( data.getString( "datePayment" ) ); //передача данных в метод для работы с ними, который возвращает строкой JSON с пользовательскими объектами для отображения в таблице String result = getDataOfTable( balanceLimit, searchDate ); assistantResponse.addFieldData( "debtorsTable", new AssistantKeyValue[]{ new AssistantKeyValue( "ru.bitel.bgbilling.assistant.contract.DebtorTableFilter", result )} ); return super.showAction( assistantRequest ); } private String getDataOfTable( int balanceLimit, LocalDate startSearchDate ) { List<DebtorTableFilter> debtors = new ArrayList<>(); Connection con = ServerContext.get( ServerContext.class ).getConnection(); String query = "SELECT c.id, c.title, cp.dt FROM contract AS c " + "LEFT JOIN contract_payment AS cp ON cp.cid=c.id WHERE cp.dt > ? GROUP BY cid ORDER BY cp.id DESC"; try( PreparedStatement ps = con.prepareStatement( query ) ) { ps.setDate( 1, Date.valueOf( startSearchDate ) ); ResultSet rs = ps.executeQuery(); while( rs.next() ) { DebtorTableFilter debtor = new DebtorTableFilter(); debtor.setContractId( rs.getInt( "c.id" ) ); debtor.setContractTitle( rs.getString( "c.title" ) ); LocalDate localDate = rs.getDate( "cp.dt" ).toLocalDate(); debtor.setLastPaymentDate( localDate.toString() ); debtors.add( debtor ); } } catch( SQLException e ) { ClientUtils.showErrorMessageDialog( e ); } //удаляем из результатов всех, у кого баланс выше заданного лимита BalanceUtils balanceUtils = new BalanceUtils( con ); Iterator<DebtorTableFilter> iterator = debtors.iterator(); while( iterator.hasNext() ) { DebtorTableFilter deb = iterator.next(); BigDecimal balance = balanceUtils.getBalance( new java.util.Date( ), deb.getContractId() ); if( balance.compareTo( new BigDecimal( balanceLimit ) ) >= 0 ) { iterator.remove(); } else { deb.setBalance( balance ); } } //здесь остались только с отрицательным балансом и для всех договоров нужно взять почту и телефон for( DebtorTableFilter deb : debtors ) { String query1 = "SELECT mail.email, phone.value FROM contract AS c LEFT JOIN contract_parameter_type_3 AS mail ON mail.cid=c.id LEFT JOIN contract_parameter_type_phone AS phone ON phone.cid=c.id WHERE c.id=?"; try( PreparedStatement ps = con.prepareStatement(query1) ) { ps.setInt(1, deb.getContractId() ); ResultSet rs = ps.executeQuery(); while( rs.next() ) { deb.setEmail( rs.getString( "mail.email" ) ); deb.setTelephone( rs.getString( "phone.value" ) ); } } catch( SQLException ex ) { ClientUtils.showErrorMessageDialog( ex ); } } //с помощью этого метода мы можем сериализовать List объектов в строку JSON-формата return AssistantUtils.mapperWrite( debtors ); } } |
...