光大银行邮件账单读取工具

偶尔看到去年写的电子账单读取代码 记录一下

public static List readBill(String mailContent) {
        List billList = new ArrayList();
        TempBillModal billModal = new TempBillModal();
        billModal.setBankname("光大银行");

        Document document = Jsoup.parse(mailContent);
        //持卡人
        String cardUserString = document.select("strong:containsOwn(尊敬的 )").toString();
        int zjd = cardUserString.indexOf("尊敬的 ") + "尊敬的 ".length();
        int nh = cardUserString.indexOf(" 您好");
        cardUserString = cardUserString.substring(zjd, nh);
        System.out.println(cardUserString);
        billModal.setCarduser(cardUserString);
        
        //账单日期
        Element accountSummaryElement = document.select("tr:contains(Statement Date)").last()
                .nextElementSibling();//tr
        String statementDate = accountSummaryElement.child(0).text();
        System.out.println("账单日期:"+statementDate.toString());
        billModal.setBilldate(statementDate);
        //账单月份
        String monthString = statementDate.substring(statementDate.indexOf("/") + 1, statementDate.lastIndexOf("/"));
        if(monthString.trim().indexOf("0")==0){
            monthString = monthString.substring(1,monthString.length());
        }
        int statementMonth = Integer.parseInt(monthString);
        System.out.println("账单月份:"+statementMonth);
        billModal.setBillmonth(statementMonth);
        
        //还款日
        String paymentDueDate = accountSummaryElement.child(1).text();
        System.out.println("还款日:" + paymentDueDate);
        billModal.setRepaydate(paymentDueDate);

        //信用额度
        String creditlimit = accountSummaryElement.child(2).text().replace("¥", "").replaceAll(",", "");
        System.out.println("信用额度:" + creditlimit);
        BigDecimal creditLimitMoney = new BigDecimal(creditlimit);
        billModal.setCreditlimit(creditLimitMoney);
        
        //应还款额
        String currentAmountDue = accountSummaryElement.child(3).text().replace("¥", "").replaceAll(",", "");
        System.out.println("应还款额:" + currentAmountDue);
        billModal.setNeddrepay(new BigDecimal(currentAmountDue));
        
        //最低还款额 
        String minAmountDue  = accountSummaryElement.child(4).text().replace("¥", "").replaceAll(",", "");
        System.out.println("最低还款额:" + minAmountDue);
        billModal.setLowrepay(new BigDecimal(minAmountDue));
        
        //信用卡号
        Element tradeElement = document.select("td:containsOwn(Account Number)").first()
                .parent().parent().child(1);
        String cardlastnum = tradeElement.child(0).text();
        cardlastnum = cardlastnum.substring(cardlastnum.length()- 4);
        System.out.println("信用卡号:"+cardlastnum);
        billModal.setCardlastnum(cardlastnum);
        
        //交易明细
        List billDetailList = new ArrayList();
        Element detailElements = document.select("tr:contains(人民币账户交易明细(单位:元)RMB Account Details)").last()
                .parent()
                .parent()
                .nextElementSibling();
        
        //获取详细账单卡号
        String accountNum = detailElements.select("span:contains(账号 Account Number:)").first().text();
        accountNum = accountNum.substring(accountNum.length() - 4);
        if(accountNum.equals(billModal.getCardlastnum())) {
            detailElements = detailElements.child(0);
            detailElements.child(0).remove();
            detailElements.child(0).remove();
            detailElements.child(detailElements.children().size() - 1).remove();
            //账单明细 
            for (Element item : detailElements.children()) {
                BillDetail billDetail = new BillDetail();
                //交易日期
                Elements eleValues = item.children();
                for (int i = 0; i < eleValues.size(); i++) {
                    //交易日期
                    String transDate = eleValues.get(0).text();
                    transDate = transDate.replaceAll("/","-");
                    billDetail.setTradedate(transDate);
                    System.out.println(transDate);
                    //交易说明
                    String detail = eleValues.get(3).text();
                    billDetail.setDetail(detail);
                    System.out.println(detail);
                    //交易金额
                    String amountStr = eleValues.get(4).text()
                            .replace(" ", "")
                            .replace("(存入)", "")
                            .replaceAll(",", "");
                    System.out.println(amountStr);
                    if(StringUtils.isEmpty(amountStr)){
                        amountStr = "0";
                    }
                    billDetail.setMoney(new BigDecimal(amountStr));
                }
                billDetailList.add(billDetail);
            }
        }
        billModal.setBillDetailList(billDetailList);
        billList.add(billModal);
        return billList;
    }

测试代码

public static void main(String[] args) throws Exception {
        MailHandler mailHandler = MailAdapter.getMailHandler("163");
        mailHandler.initMail("[email protected]", "xxxx");
        mailHandler.loginMail();
        Message[] emailMessage = mailHandler.readMail();
        System.out.println("邮件总数:" + emailMessage.length);
        for (Message msg : emailMessage) {
            MimeMessage mimeMessage = (MimeMessage) msg;
            ReceiveMail receiveMail = new ReceiveMail(mimeMessage);
            if (receiveMail.getFrom().contains("光大的客户邮件地址")// 光大
                    && receiveMail.getSubject().contains("光大银行信用卡电子对账单")) {
                receiveMail.getMailContent(null);
                String mailContent = receiveMail.getBodyText();
                
                GuangdaBankBill.readBill(mailContent);
            }
        }

    }

 

转载于:https://my.oschina.net/riaway/blog/687115

你可能感兴趣的:(光大银行邮件账单读取工具)