package foundation.ai.logic; import java.sql.PreparedStatement; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import foundation.ai.OCRResult; import foundation.ai.dao.InvoiceVerificationDao; import foundation.ai.dao.InvoiceVerificationDetailDao; import foundation.ai.dao.VatInvoiceVerifyDao; import foundation.data.entity.Entity; import foundation.data.object.DataObject; import foundation.data.object.EntitySaver; import foundation.persist.IDoubleSavable; import foundation.persist.ISavable; import foundation.persist.NamedSQL; import foundation.persist.SQLRunner; import foundation.util.ID; import foundation.util.Util; public class VatInvoiceVerifyLogic implements IDoubleSavable,ISavable{ public void markBill(String fileId) { DataObject fileDataObject = DataObject.getInstance("file_index"); try { Entity entity = fileDataObject.getBrowseEntity(fileId); entity.set("is_bill", "1"); fileDataObject.updateEntity(entity); } catch(Exception e) { e.printStackTrace(); } } public void deleteBillImage(String fileId) { DataObject fileDataObject = DataObject.getInstance("file_index"); try { fileDataObject.deleteEntity(fileId); } catch(Exception e) { e.printStackTrace(); } } public VatInvoiceVerifyDao parseInvoiceInfo(OCRResult ocrResult) { String bill_code = null, bill_no = null, bill_date = null, check_code = null, amount = null; String name_str = null, value_str = null; JsonObject oneBillObject = null; VatInvoiceVerifyDao vatInvoiceVerify = new VatInvoiceVerifyDao(bill_code, bill_no, bill_date, check_code, amount); Gson gson = new Gson(); JsonObject jsonObject = gson.fromJson(ocrResult.getJson(), JsonObject.class); JsonElement billElement = jsonObject.get("VatInvoiceInfos"); JsonArray jsonBillArray = billElement.getAsJsonArray(); for (int i = 0; i < jsonBillArray.size(); i++) { oneBillObject = jsonBillArray.get(i).getAsJsonObject(); if (Util.isEmpty(oneBillObject)) { continue; } name_str = oneBillObject.get("Name").getAsString(); value_str = oneBillObject.get("Value").getAsString(); if (Util.isEmpty(name_str) || Util.isEmpty(value_str)) { continue; } if ("发票代码".equalsIgnoreCase(name_str)) { bill_code = value_str; vatInvoiceVerify.setInvoiceCode(bill_code); } if ("发票号码".equalsIgnoreCase(name_str)) { bill_no = value_str.replace("No", ""); vatInvoiceVerify.setInvoiceNo(bill_no); } if ("开票日期".equalsIgnoreCase(name_str)) { bill_date = value_str.replace("年", "-").replace("月", "-").replace("日", ""); vatInvoiceVerify.setInvoiceDate(bill_date); } if ("校验码".equalsIgnoreCase(name_str)) { check_code = value_str; check_code = check_code.substring(check_code.length() - 6, check_code.length()); vatInvoiceVerify.setAdditional(check_code); } if ("合计金额".equalsIgnoreCase(name_str)) { amount = value_str.replace("¥", ""); vatInvoiceVerify.setAmount(amount); } } return vatInvoiceVerify; } public void saveVatInvoiceVerify(OCRResult ocrResult) { DataObject dataObject = null; String id = null; Gson gson = new Gson(); JsonObject jsonObject = gson.fromJson(ocrResult.getJson(), JsonObject.class); InvoiceVerificationDao invoiceVerification = gson.fromJson(jsonObject.get("Invoice"), InvoiceVerificationDao.class); try { SQLRunner.beginTrans(); //1.保存发票主体 id = ID.newValue(); dataObject = DataObject.getInstance("so_implant_invoice"); EntitySaver saver = dataObject.createEntitySaver(); saver.set("id", id); saver.set("code", invoiceVerification.getCode()); saver.set("number", invoiceVerification.getNumber()); saver.set("machine_no", invoiceVerification.getMachineNo()); saver.set("check_code", invoiceVerification.getCheckCode()); saver.set("invoice_date", invoiceVerification.getInvoiceDate()); saver.set("has_seller_list", invoiceVerification.getHasSellerList()); saver.set("traffic_free_flag", invoiceVerification.getTrafficFreeFlag()); saver.set("type", invoiceVerification.getTypeCode()); saver.set("buyer_name", invoiceVerification.getBuyerName()); saver.set("buyer_taxcode", invoiceVerification.getBuyerTaxCode()); saver.set("buyer_address_phone", invoiceVerification.getBuyerAddressPhone()); saver.set("buyer_bank_account", invoiceVerification.getBuyerBankAccount()); saver.set("seller_name", invoiceVerification.getSellerName()); saver.set("seller_taxcode", invoiceVerification.getSellerTaxCode()); saver.set("seller_address_phone", invoiceVerification.getSellerAddressPhone()); saver.set("seller_bank_account", invoiceVerification.getSellerBankAccount()); saver.set("seller_list_tax", invoiceVerification.getSellerListTax()); saver.set("amount_with_tax", invoiceVerification.getAmountWithTax()); saver.set("amount_without_tax", invoiceVerification.getAmountWithoutTax()); saver.set("amount_tax", invoiceVerification.getAmountTax()); saver.set("bureau_tax", invoiceVerification.getBureauTax()); saver.set("is_abandoned", invoiceVerification.getIsAbandoned()); saver.set("remark", invoiceVerification.getRemark()); saver.insert(); //2.保存发票明细 dataObject = DataObject.getInstance("so_implant_invoice_detail"); NamedSQL detailSQL = NamedSQL.getInstance("saveInvoiceVerificationDetail"); for (InvoiceVerificationDetailDao invoiceVerificationDetail : invoiceVerification.getItems()) { detailSQL.setParam("parent_id", id); detailSQL.setParam("line_no", invoiceVerificationDetail.getLineNo()); detailSQL.setParam("name", invoiceVerificationDetail.getName()); detailSQL.setParam("qty", invoiceVerificationDetail.getQty()); detailSQL.setParam("spec", invoiceVerificationDetail.getSpec()); detailSQL.setParam("unit", invoiceVerificationDetail.getUnit()); detailSQL.setParam("unit_price", invoiceVerificationDetail.getPrice()); detailSQL.setParam("tax_rate", invoiceVerificationDetail.getTaxRate()); detailSQL.setParam("amount_tax", invoiceVerificationDetail.getAmtTax()); detailSQL.setParam("amount_without_tax", invoiceVerificationDetail.getAmtAfterTax()); detailSQL.setParam("classifycode_tax", invoiceVerificationDetail.getClassifyCodeTax()); SQLRunner.execSQL(detailSQL); } SQLRunner.commit(); } catch(Exception e) { try { SQLRunner.rollback(); } catch(Exception ex) { ex.printStackTrace(); } } } @Override public void saveData(PreparedStatement stmt, Object... agrs) throws Exception { // TODO Auto-generated method stub // int cellIndex = 0; // if (agrs.length > 0) { // cellIndex = (Integer) agrs[0]; // } // for (int h = 0; h < excelData.size(); h++) {//批处理存入数据 // dataLinked = excelData.get(h); // int cellCnt = cellIndex == 0 ? dataLinked.size() - 1 : dataLinked.size(); // for (int k = cellIndex; k <= cellCnt; k++) {//dataLinked.size() - 1 // if (cellIndex == 0) { // if (dataLinked.get(k) == null) { // stmt.setObject(k+1, null); // } // else if (dataLinked.get(k).toString().equals("")) { // stmt.setObject(k+1, null); // } else { // String insertData = convertSqlData(dataLinked.get(k).toString()); // stmt.setString(k+1, insertData); // } // } // else { // if (dataLinked.get(k-1).toString().equals("")) { // stmt.setObject(k, null); // } else { // String insertData = convertSqlData(dataLinked.get(k-1).toString()); // stmt.setString(k, insertData); // } // } // } // // stmt.addBatch(); // } // stmt.executeBatch(); } @Override public void save(PreparedStatement stmt1, PreparedStatement stmt2, Object... agrs) throws Exception { // TODO Auto-generated method stub } }