diff --git a/dxhy-core/src/main/java/com/dxhy/core/util/InvoiceTypeUtils.java b/dxhy-core/src/main/java/com/dxhy/core/util/InvoiceTypeUtils.java index 5efc552b..3afe6a3d 100644 --- a/dxhy-core/src/main/java/com/dxhy/core/util/InvoiceTypeUtils.java +++ b/dxhy-core/src/main/java/com/dxhy/core/util/InvoiceTypeUtils.java @@ -111,6 +111,9 @@ public class InvoiceTypeUtils { case "186": invoiceName = "全电纸质发票(增值税普通发票)"; break; + case "16": + invoiceName = "区块链发票"; + break; // case "85": // invoiceName = "可报销其他发票"; // break; diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/entity/BaseTDxRecordInvoice.java b/dxhy-erp/src/main/java/com/dxhy/erp/entity/BaseTDxRecordInvoice.java index 82861c3f..835a0840 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/entity/BaseTDxRecordInvoice.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/entity/BaseTDxRecordInvoice.java @@ -477,4 +477,6 @@ public class BaseTDxRecordInvoice implements Serializable { private String compCode; private String outResource; + private String taxRate; + } diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/entity/BaseTDxRecordInvoiceDetail.java b/dxhy-erp/src/main/java/com/dxhy/erp/entity/BaseTDxRecordInvoiceDetail.java index ae0d8db9..cc9c72af 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/entity/BaseTDxRecordInvoiceDetail.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/entity/BaseTDxRecordInvoiceDetail.java @@ -115,4 +115,6 @@ public class BaseTDxRecordInvoiceDetail implements Serializable { */ private String spfwjc; + private String taxCode; + } diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java index 3ed04e4e..25aebbfc 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java @@ -4,13 +4,16 @@ import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.dxhy.common.constant.DbConstant; import com.dxhy.common.datasource.config.DynamicContextHolder; import com.dxhy.common.enums.FplxEnum; import com.dxhy.common.enums.SNFplxEnum; import com.dxhy.common.util.InvoiceUtil; import com.dxhy.common.util.StringHelper; +import com.dxhy.common.utils.DateUtils; import com.dxhy.common.utils.R; import com.dxhy.common.vo.UserInfo; import com.dxhy.erp.dao.*; @@ -22,6 +25,7 @@ import com.dxhy.erp.entity.kfpt.TokenResponse; import com.dxhy.erp.entity.sdny.InvoiceDetail; import com.dxhy.erp.entity.sdny.InvoiceInfo; import com.dxhy.erp.entity.sdny.SNInvoice; +import com.dxhy.erp.entity.sdny.SNInvoiceDetail; import com.dxhy.erp.entity.sdny.area.Area; import com.dxhy.erp.utils.Base64; import com.dxhy.erp.utils.*; @@ -758,13 +762,41 @@ public class SNPushCheckRecordService extends AbstractServiceAdapter { log.error("补充查验失败,errormsg:{}", e.getMessage()); } - if (checkInvoiceResult != null && !checkInvoiceResult.containsKey("code")) { - if (!checkInvoiceResult.containsKey("cyjg")) { - checkInvoiceResult.put("invoiceNo", checkInvoiceResult.getString("invoiceNumber")); - log.info("补充查验的结果为:{}", checkInvoiceResult); - signSaveInvoiceInfoService.saveQueryInvoiceResult(checkInvoiceResult, "", "1", "business"); + + //库里没有补充查验 + if (checkInvoiceResult != null && !checkInvoiceResult.containsKey("code") && !checkInvoiceResult.containsKey("cyjg")) { + checkInvoiceResult.put("invoiceNo", checkInvoiceResult.getString("invoiceNumber")); + if ("3".equals(invoice.getCheckStatus())){ + checkInvoiceResult.put("checkStatus","3"); + } + log.info("补充查验的结果为:{}", checkInvoiceResult); + signSaveInvoiceInfoService.saveQueryInvoiceResult(checkInvoiceResult, "", "1", "business"); + } else if (invoice != null && "3".equals(invoice.getCheckStatus())) { + //不可查验类型区块链发票直接从影像取值入库 + try { + BaseTDxRecordInvoice invoiceInfo = convertToEleInvoiceInfo(invoice); + //插入主信息 + baseTDxRecordInvoiceDao.insert(invoiceInfo); + + if (invoice.getInvoiceLineList() != null && invoice.getInvoiceLineList().size() > 0) { + List tDxRecordInvoiceDetails = convertToEleInvoiceDetail(invoice); + + if (tDxRecordInvoiceDetails != null && tDxRecordInvoiceDetails.size() > 0) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(BaseTDxRecordInvoiceDetail::getUuid,invoiceInfo.getUuid()); + //先删除明细 + baseTDxRecordInvoiceDetailDao.delete(queryWrapper); + //插入明细 + for (BaseTDxRecordInvoiceDetail tDxRecordInvoiceDetail : tDxRecordInvoiceDetails) { + baseTDxRecordInvoiceDetailDao.insert(tDxRecordInvoiceDetail); + } + } + } + } catch (Exception e) { + log.error("查验失败区块链发票入库异常:{}", e); } } + } //可查验发票,已入库,更新票池 @@ -780,6 +812,132 @@ public class SNPushCheckRecordService extends AbstractServiceAdapter { return result; } + public BaseTDxRecordInvoice convertToEleInvoiceInfo(SNInvoice invoice) { + BaseTDxRecordInvoice invoiceInfo = new BaseTDxRecordInvoice(); + + if (invoice != null){ + + invoiceInfo.setInvoiceType("16"); + invoiceInfo.setInvoiceCode(invoice.getInvoiceCode()); + invoiceInfo.setInvoiceNo(invoice.getInvoiceNumber()); + invoiceInfo.setGfTaxNo(invoice.getPurchaserTaxNo()); + invoiceInfo.setGfName(invoice.getPurchaserName()); + invoiceInfo.setGfAddressAndPhone(invoice.getPurchaserAddressPhone()); + invoiceInfo.setGfBankAndNo(invoice.getPurchaserBank()); + invoiceInfo.setXfTaxNo(invoice.getSalesTaxNo()); + invoiceInfo.setXfName(invoice.getSalesName()); + invoiceInfo.setXfAddressAndPhone(invoice.getSalesAddressPhone()); + invoiceInfo.setXfBankAndNo(invoice.getSalesBank()); + + + BigDecimal invoiceAmount = strToBigDecimal(invoice.getTotalAmount()); + if (invoiceAmount != null){ + invoiceInfo.setInvoiceAmount(invoiceAmount); + } + + BigDecimal totalAmout = strToBigDecimal(invoice.getAmountTax()); + if (totalAmout != null){ + invoiceInfo.setTotalAmount(totalAmout); + } + + BigDecimal taxAmount = strToBigDecimal(invoice.getTotalTax()); + if (taxAmount != null){ + invoiceInfo.setTaxAmount(taxAmount); + } + + invoiceInfo.setRemark(invoice.getRemarks()); + invoiceInfo.setInvoiceStatus(invoice.getState()); + invoiceInfo.setStatusUpdateDate(new Date()); + invoiceInfo.setLastUpdateDate(new Date()); + invoiceInfo.setQsDate(new Date()); + invoiceInfo.setRzhYesorno("0"); + invoiceInfo.setSourceSystem("3"); + invoiceInfo.setValid("1"); + invoiceInfo.setUuid((StringUtils.isBlank(invoice.getInvoiceCode())?"":invoice.getInvoiceCode())+invoice.getInvoiceNumber()); + invoiceInfo.setCreateDate(new Date()); + invoiceInfo.setSfygx("0"); + invoiceInfo.setDetailYesorno("0"); + invoiceInfo.setAuthStatus("0"); + invoiceInfo.setQsStatus("0"); + invoiceInfo.setCheckCode(invoice.getCheckCode()); + invoiceInfo.setLslbz(invoice.getZeroTaxRateSign()); + invoiceInfo.setTxfbz(invoice.getTollSign()); + invoiceInfo.setOutStatus("0"); + invoiceInfo.setCxrzStatus("0"); + invoiceInfo.setBdkStatus("0"); + invoiceInfo.setCxbdkStatus("0"); + invoiceInfo.setCompany("SDNYJTJX"); + invoiceInfo.setTaxRate(invoice.getTaxRate()); + invoiceInfo.setMachinecode(invoice.getMachineCode()); + + //影像号 + invoiceInfo.setImageId(invoice.getFileId()); + + if (StringUtils.isNotBlank(invoice.getBillingDate())){ + Date invoiceDate = DateUtils.strToDate(invoice.getBillingDate()); + invoiceInfo.setInvoiceDate(invoiceDate); + } + + if (invoice.getInvoiceLineList() != null && invoice.getInvoiceLineList().size() > 0){ + invoiceInfo.setDetailYesorno("1"); + } + } + return invoiceInfo; + } + + public List convertToEleInvoiceDetail(SNInvoice invoice) { + + List invoiceLineList = invoice.getInvoiceLineList(); + + List invoiceDetailList = new ArrayList<>(); + + if (invoiceLineList != null && invoiceLineList.size() > 0){ + + for (SNInvoiceDetail invoiceDetail : invoiceLineList) { + BaseTDxRecordInvoiceDetail invoiceDetailInfo = new BaseTDxRecordInvoiceDetail(); + invoiceDetailInfo.setUuid((StringUtils.isBlank(invoice.getInvoiceCode())?"":invoice.getInvoiceCode())+invoice.getInvoiceNumber()); + invoiceDetailInfo.setInvoiceNo(invoice.getInvoiceNumber()); + invoiceDetailInfo.setInvoiceCode(invoice.getInvoiceCode()); + invoiceDetailInfo.setDetailNo(invoiceDetail.getRowNo()); + invoiceDetailInfo.setGoodsName(invoiceDetail.getCommodityName()); + invoiceDetailInfo.setModel(invoiceDetail.getSpecificationModel()); + invoiceDetailInfo.setUnit(invoiceDetail.getUnit()); + invoiceDetailInfo.setNum(invoiceDetail.getQuantity()); + invoiceDetailInfo.setUnitPrice(invoiceDetail.getUnitPrice()); + invoiceDetailInfo.setDetailAmount(invoiceDetail.getAmount()); + invoiceDetailInfo.setTaxAmount(invoiceDetail.getTax()); + invoiceDetailInfo.setCph(invoiceDetail.getLicensePlateNum()); + invoiceDetailInfo.setLx(invoiceDetail.getType()); + invoiceDetailInfo.setTxrqq(invoiceDetail.getCurrentDateStart()); + invoiceDetailInfo.setTxrqz(invoiceDetail.getCurrentDateEnd()); + invoiceDetailInfo.setTaxCode(invoiceDetail.getTaxCode()); + invoiceDetailInfo.setGoodsName(invoiceDetail.getCommodityName()); + BigDecimal taxRate = strToBigDecimal(invoiceDetail.getTaxRate()); + if (taxRate != null){ + invoiceDetailInfo.setTaxRate(taxRate.multiply(new BigDecimal("100")).stripTrailingZeros().toPlainString()); + }else if (StringUtils.isNotBlank(invoiceDetail.getTaxRate())){ + invoiceDetailInfo.setTaxRate(invoiceDetail.getTaxRate().replace("%","")); + } + invoiceDetailList.add(invoiceDetailInfo); + + } + + } + + return invoiceDetailList; + } + + + public static BigDecimal strToBigDecimal(String str) { + BigDecimal decimal = null; + try { + decimal = new BigDecimal(str); + } catch (Exception e) { + log.error("转换Bigdecimal失败,传入参数为{}", str); + } + return decimal; + } + private TDxInvoiceReimburse convertToReimburse(SNInvoice invoice, TDxInvoiceReimburse reimburse, String fplxdm, String company) { reimburse.setId(IdUtils.nextId()); reimburse.setInvoiceType(fplxdm); diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/SignSaveInvoiceInfoServiceImpl.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/SignSaveInvoiceInfoServiceImpl.java index 0bd85f44..a2212cc2 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/SignSaveInvoiceInfoServiceImpl.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/SignSaveInvoiceInfoServiceImpl.java @@ -550,6 +550,9 @@ public class SignSaveInvoiceInfoServiceImpl extends MpBaseServiceImpl