• 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;
        }
        
  • 相关阅读:
    Java虚拟机的内存模型
    JAVA 对文件的操作
    JAVA 读取 YAML 文件
    Nginx 502 问题解决 及 安装
    Python pdb 调试 命令
    pycharm设置鼠标控制字体大小
    ISO9126 软件质量模型
    人生苦短我学Java9面向对象三大特性之多态 广深
    Golang微服务入门到精通之路3类的封装/继承/多态/接口类型 广深
    人生苦短我学Java10final关键字/代码块/抽象类 广深
  • 原文地址:https://www.cnblogs.com/xiaoniuniu886/p/10334452.html
Copyright © 2020-2023  润新知