加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 05:13:00 所属栏目:大数据 来源:网络整理
导读:/** * 保存发票信息 * @param controller * @return * @throws ParseException * @throws ActiveRecordException */ @Before(Tx. class ) public boolean addInvoice(QhyfController controller) throws Exception{ BizInvoiceInfo bizInvoiceInfo = new Biz
/**
     * 保存发票信息
     * @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 = ? ",BlConstant.SYS_STATUS_VALUE);
            sameInvoiceRecord = Db.findFirst(sameInvoiceSql,payId);
            if(sameInvoiceRecord != null){
                AssertUtils.isNull(sameInvoiceRecord.getStr("uuid"),sameInvoiceRecord.getStr("invoiceNo")+"发票已存在");
            }
            //新增
            //参数设置
            bizInvoiceInfo.set("payId",payId);
            //设置发票编号
            bizInvoiceInfo.set("invoiceNo",invoiceDate);
            //设置发票金额
            bizInvoiceInfo.set("invoiceAmount",invoiceAmount);
            bizInvoiceInfo.set("checkResult",invoiceMemo);
            //设置应收账款金额
            bizInvoiceInfo.set("accountReceivable",accountReceivable);
            bizInvoiceInfo.set("invoiceNoTaxAmount",invoiceCode);

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读