Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package br.com.mobtag.investws.util;
- import java.math.BigDecimal;
- import java.math.BigInteger;
- import java.math.RoundingMode;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.concurrent.TimeUnit;
- public class CelescCalc {
- @SuppressWarnings("unused")
- public static void main(String[] args) throws Exception {
- SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
- BigDecimal COSIP = BigDecimal.ZERO;
- BigDecimal mediaMedicaoDiaKwh = BigDecimal.ZERO;
- BigDecimal valorMedicaoDiaComCosipBandeira = BigDecimal.ZERO;
- BigDecimal valorTotal = BigDecimal.ZERO;
- String PERIODO_INI = "21/11/2018";
- String PERIODO_FIM = "05/12/2018";
- BigInteger MEDICAO_ANTERIOR = new BigInteger("26372");
- BigInteger MEDICAO_ATUAL = new BigInteger("26443");
- BigDecimal VALOR_KWH = new BigDecimal("0.621000");
- BigDecimal BANDEIRA_VERDE = BigDecimal.ZERO;
- BigDecimal BANDEIRA_AMARELA = new BigDecimal("0.01");
- BigDecimal BANDEIRA_VERMELHA_P1 = new BigDecimal("0.03");
- BigDecimal BANDEIRA_VERMELHA_P2 = new BigDecimal("0.05");
- Date dateIni = simpleDateFormat.parse(PERIODO_INI);
- Date dateFim = simpleDateFormat.parse(PERIODO_FIM);
- long diasPeriodo = getDifferenceDays(dateIni, dateFim);
- BigInteger medicao = MEDICAO_ATUAL.subtract(MEDICAO_ANTERIOR);
- mediaMedicaoDiaKwh = new BigDecimal(medicao).divide(new BigDecimal(diasPeriodo),2, RoundingMode.HALF_UP);
- BigDecimal valorMedicao = VALOR_KWH.multiply(new BigDecimal(medicao));
- valorTotal = valorTotal.add(valorMedicao);
- BigDecimal adicionalBandeira = getBandeira(medicao, BANDEIRA_VERMELHA_P2);
- valorTotal = valorTotal.add(adicionalBandeira);
- COSIP = getCosip(medicao);
- valorTotal = valorTotal.add(COSIP);
- valorMedicaoDiaComCosipBandeira = valorTotal.divide(new BigDecimal(diasPeriodo),2,RoundingMode.HALF_UP);
- System.out.println("---------------------- VALORES ---------------------------------");
- System.out.println("Valor Medição : "+valorMedicao.setScale(2, BigDecimal.ROUND_HALF_UP));
- System.out.println("Valor Adicional Bandeira : "+adicionalBandeira.setScale(2, BigDecimal.ROUND_HALF_UP));
- System.out.println("Cosip : "+COSIP.setScale(2, BigDecimal.ROUND_HALF_UP));
- System.out.println("Valor Total : "+valorTotal.setScale(2, BigDecimal.ROUND_HALF_UP));
- System.out.println("---------------------- ESTATISTICAS ---------------------------------");
- System.out.println("Medição no período : "+medicao);
- System.out.println("Qtde Dias : "+diasPeriodo);
- System.out.println("Média medição Kwh Dia : "+mediaMedicaoDiaKwh.setScale(2, BigDecimal.ROUND_HALF_UP));
- System.out.println("Valor Diário com Cosip/Bandeira : "+valorMedicaoDiaComCosipBandeira.setScale(2, BigDecimal.ROUND_HALF_UP));
- }
- public static BigDecimal getCosip(BigInteger medicao){
- if(medicao.intValue()<= 30){
- return new BigDecimal("1.00");
- }else if(medicao.intValue()>= 31 && medicao.intValue()<= 50){
- return new BigDecimal("2.00");
- }else if(medicao.intValue()>= 51 && medicao.intValue()<= 100){
- return new BigDecimal("4.00");
- }else if(medicao.intValue()>= 101 && medicao.intValue()<= 200){
- return new BigDecimal("9.00");
- }else if(medicao.intValue()>= 201 && medicao.intValue()<= 500){
- return new BigDecimal("21.50");
- }else if(medicao.intValue()>= 501 && medicao.intValue()<= 1000){
- return new BigDecimal("46.00");
- }else if(medicao.intValue()>= 1001 && medicao.intValue()<= 1500){
- return new BigDecimal("76.50");
- }else{
- return new BigDecimal("92.00");
- }
- }
- public static BigDecimal getBandeira(BigInteger medicao, BigDecimal bandeira){
- if(bandeira.equals(BigDecimal.ZERO)){
- return BigDecimal.ZERO;
- }
- return bandeira.multiply(new BigDecimal(medicao));
- }
- public static long getDifferenceDays(Date d1, Date d2) {
- long diff = d2.getTime() - d1.getTime();
- return TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);
- }
- }
Add Comment
Please, Sign In to add comment