BigDecimal 與 doubleValue 的使用 ,以及四舍五入


/**
     * 保存發票信息
     * @param controller
     * @return
     * @throws ParseException
     * @throws ActiveRecordException
     */
    @Before(Tx.class)
    public boolean addInvoice(QhyfController controller) throws Exception{
        BizInvoiceInfo bizInvoiceInfo = new BizInvoiceInfo();
        //參數獲取
        String uuid = controller.getPara("uuid");
        boolean isTrue = false;
        String payId = controller.getPara("pay");
        StringTools.isNotBlank(payId);
        if (this.maxHisId(payId)==0) {
            //履歷表沒有數據時,更新前,保存一次履歷
            saveHistoryInfo(payId, controller);
        }
        String invoiceNo = controller.getPara("invoiceNo");
        String checkResult = controller.getPara("checkResult");
        String invoiceMemo = controller.getPara("invoiceMemo");
        String originalInvoiceNo = controller.getPara("originalInvoiceNo");
        String invoiceName = controller.getPara("invoiceName");
        BigDecimal invoiceNoTaxAmount =null;
        String checkCode = controller.getPara("checkCode");
        String invoiceType = controller.getPara("invoiceType");
        String invoiceCode = controller.getPara("invoiceCode");
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
//需求變更,菜單修改發票信息,可不選開票日期 2016/09/24 黎旭 START
        Date invoiceDate =null;
        if(StringUtils.notBlank(controller.getPara("invoiceDate"))){
            invoiceDate = format.parse(controller.getPara("invoiceDate"));    
        }
//        Date invoiceDate = format.parse(controller.getPara("invoiceDate"));
//需求變更,菜單修改發票信息,可不選開票日期 2016/09/24 黎旭 END
//需求變更,新增,修改發票信息發票金額和應收賬款金額可以為空, 2016/09/26 劉果 START
        BigDecimal invoiceAmount = null;
        BigDecimal accountReceivable = null;
        String invoiceAmountTmp = controller.getPara("invoiceAmount");
        String accountReceivableTmp = controller.getPara("accountReceivable");
        String invoiceNoTaxAmountTmp =  controller.getPara("invoiceNoTaxAmount");
        if (StringUtils.notBlank(invoiceAmountTmp)) {
            // 發票金額不為空
            invoiceAmount = new BigDecimal(invoiceAmountTmp.replace(",", ""));
        } else {
            //
        }
        if (StringUtils.notBlank(accountReceivableTmp)) {
            // 應收賬款金額不為空
            accountReceivable = new BigDecimal(accountReceivableTmp.replace(",", ""));
        } else {
            //
        }
        if (StringUtils.notBlank(invoiceNoTaxAmountTmp)) {
            // 應收賬款金額不為空
            invoiceNoTaxAmount = new BigDecimal(invoiceNoTaxAmountTmp.replace(",", ""));
        } else {
            //
        }
        
        // 發票金額、應收賬款金額 不為空時
        if (invoiceAmount != null && accountReceivable  != null ) {
            // 發票應收賬款金額  accountReceivable 四舍五入
            double resultInvoiceAccountReceivableB = accountReceivable.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
            // 獲取發票金額 invoiceAmount  四舍五入
            double resultInvoiceAmountB = invoiceAmount.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
            
            List<String> para = new ArrayList<String>();
            //根據發票號和付款確認書編號查詢當前發票已抵扣金額合計
            para.add(invoiceNo);
            para.add(payId);
            String sql="CALL invoice_deduction_amount(?,?) ";
            // 執行SQL
            Record record = Db.findFirst(sql, para.toArray());
            // 當前發票已抵扣金額
            BigDecimal invoiceAmountCall = null;
            // 獲取發票已抵扣金額
            if(record!=null){
                invoiceAmountCall = record.getBigDecimal("accountReceivable");
            }
            // 發票剩余可用抵扣金額
            double deductibleAmountAvailable = resultInvoiceAmountB ;
            // 發票已抵扣金額不為空
            if (invoiceAmountCall != null ) {
                //  發票剩余可用抵扣金額 = 發票金額 - 當前發票已抵扣金額 
                deductibleAmountAvailable = resultInvoiceAmountB - invoiceAmountCall.doubleValue();
            }
            // 該發票的應收賬款金額不能大於發票剩余可用抵扣金額(已抵扣金額【%s】)
            AssertUtils.isTrue(resultInvoiceAccountReceivableB <= deductibleAmountAvailable, AlertUtils.getErrMsgWithCode("ME414E015",invoiceAmountCall == null ? 0 : invoiceAmountCall.doubleValue()));
        }
    
        if (!StringUtils.isBlank(uuid)) {
            //更新
            StringTools.isNotBlank(uuid);
            if(!originalInvoiceNo.equals(invoiceNo)){
                //查詢是否存在相同發票
                Record sameInvoiceRecord = null;
                String sameInvoiceSql = String.format(
                        " SELECT"
                        + " a.uuid,a.invoice_no"
                        + " FROM %s a"
                        + " WHERE a.sys_status = %s AND"
                        + " a.invoice_no = ? AND"
                        + " a.pay_id = ? ",
                        BizInvoiceInfo.dao.getTable().getName(), 
                        BlConstant.SYS_STATUS_VALUE);
                sameInvoiceRecord = Db.findFirst(sameInvoiceSql, invoiceNo,payId);
                if(sameInvoiceRecord != null){
                    AssertUtils.isNull(sameInvoiceRecord.getStr("uuid"), sameInvoiceRecord.getStr("invoiceNo")+"發票已存在");
                }
            }
            bizInvoiceInfo.set("uuid", uuid);
            //設置發票編號
            bizInvoiceInfo.set("invoiceNo", invoiceNo);
            //設置發票名稱
            bizInvoiceInfo.set("invoiceName", invoiceName);
            //設置開票日期
            bizInvoiceInfo.set("invoiceDate", invoiceDate);
            bizInvoiceInfo.set("checkResult", checkResult);
            bizInvoiceInfo.set("invoiceMemo", invoiceMemo);
            //設置發票金額
            bizInvoiceInfo.set("invoiceAmount", invoiceAmount);
            bizInvoiceInfo.set("invoiceNoTaxAmount", invoiceNoTaxAmount);
            if(StringUtils.notBlank(checkCode))
                bizInvoiceInfo.set("checkCode", checkCode);
            bizInvoiceInfo.set("invoiceType", invoiceType);
            bizInvoiceInfo.set("invoiceCode", invoiceCode);

            //設置應收賬款金額
            bizInvoiceInfo.set("accountReceivable", accountReceivable);
            isTrue = controller.merge(bizInvoiceInfo.getTable().getName(), bizInvoiceInfo);
            controller.setSessionAttr("historyFlag", true);
        } else {
            //查詢是否存在相同發票
            Record sameInvoiceRecord = null;
            String sameInvoiceSql = String.format(
                    " SELECT"
                    + " a.uuid,a.invoice_no"
                    + " FROM %s a"
                    + " WHERE a.sys_status = %s AND"
                    + " a.invoice_no = ? AND"
                    + " a.pay_id = ? ",
                    BizInvoiceInfo.dao.getTable().getName(), 
                    BlConstant.SYS_STATUS_VALUE);
            sameInvoiceRecord = Db.findFirst(sameInvoiceSql, invoiceNo,payId);
            if(sameInvoiceRecord != null){
                AssertUtils.isNull(sameInvoiceRecord.getStr("uuid"), sameInvoiceRecord.getStr("invoiceNo")+"發票已存在");
            }
            //新增
            //參數設置
            bizInvoiceInfo.set("payId", payId);
            //設置發票編號
            bizInvoiceInfo.set("invoiceNo", invoiceNo);
            //設置發票名稱
            bizInvoiceInfo.set("invoiceName", invoiceName);
            //設置開票日期
            bizInvoiceInfo.set("invoiceDate", invoiceDate);
            //設置發票金額
            bizInvoiceInfo.set("invoiceAmount", invoiceAmount);
            bizInvoiceInfo.set("checkResult", checkResult);
            bizInvoiceInfo.set("invoiceMemo", invoiceMemo);
            //設置應收賬款金額
            bizInvoiceInfo.set("accountReceivable", accountReceivable);
            bizInvoiceInfo.set("invoiceNoTaxAmount", invoiceNoTaxAmount);
            if(StringUtils.notBlank(checkCode))
                bizInvoiceInfo.set("checkCode", checkCode);
            bizInvoiceInfo.set("invoiceType", invoiceType);
            bizInvoiceInfo.set("invoiceCode", invoiceCode);

            isTrue = controller.merge(BizInvoiceInfo.dao.getTable().getName(),bizInvoiceInfo);
            controller.setSessionAttr("historyFlag", true);
        }
        
        return isTrue;
    }
    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM