/** * 保存发票信息 * @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; }