|
|
@ -4,13 +4,16 @@ import cn.hutool.core.date.DatePattern; |
|
|
|
import cn.hutool.core.date.DateUtil; |
|
|
|
import cn.hutool.core.date.DateUtil; |
|
|
|
import com.alibaba.fastjson.JSONArray; |
|
|
|
import com.alibaba.fastjson.JSONArray; |
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
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.query.QueryWrapper; |
|
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
|
|
|
import com.dxhy.common.constant.DbConstant; |
|
|
|
import com.dxhy.common.constant.DbConstant; |
|
|
|
import com.dxhy.common.datasource.config.DynamicContextHolder; |
|
|
|
import com.dxhy.common.datasource.config.DynamicContextHolder; |
|
|
|
import com.dxhy.common.enums.FplxEnum; |
|
|
|
import com.dxhy.common.enums.FplxEnum; |
|
|
|
import com.dxhy.common.enums.SNFplxEnum; |
|
|
|
import com.dxhy.common.enums.SNFplxEnum; |
|
|
|
import com.dxhy.common.util.InvoiceUtil; |
|
|
|
import com.dxhy.common.util.InvoiceUtil; |
|
|
|
import com.dxhy.common.util.StringHelper; |
|
|
|
import com.dxhy.common.util.StringHelper; |
|
|
|
|
|
|
|
import com.dxhy.common.utils.DateUtils; |
|
|
|
import com.dxhy.common.utils.R; |
|
|
|
import com.dxhy.common.utils.R; |
|
|
|
import com.dxhy.common.vo.UserInfo; |
|
|
|
import com.dxhy.common.vo.UserInfo; |
|
|
|
import com.dxhy.erp.dao.*; |
|
|
|
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.InvoiceDetail; |
|
|
|
import com.dxhy.erp.entity.sdny.InvoiceInfo; |
|
|
|
import com.dxhy.erp.entity.sdny.InvoiceInfo; |
|
|
|
import com.dxhy.erp.entity.sdny.SNInvoice; |
|
|
|
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.entity.sdny.area.Area; |
|
|
|
import com.dxhy.erp.utils.Base64; |
|
|
|
import com.dxhy.erp.utils.Base64; |
|
|
|
import com.dxhy.erp.utils.*; |
|
|
|
import com.dxhy.erp.utils.*; |
|
|
@ -758,13 +762,41 @@ public class SNPushCheckRecordService extends AbstractServiceAdapter { |
|
|
|
log.error("补充查验失败,errormsg:{}", e.getMessage()); |
|
|
|
log.error("补充查验失败,errormsg:{}", e.getMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (checkInvoiceResult != null && !checkInvoiceResult.containsKey("code")) { |
|
|
|
|
|
|
|
if (!checkInvoiceResult.containsKey("cyjg")) { |
|
|
|
//库里没有补充查验
|
|
|
|
checkInvoiceResult.put("invoiceNo", checkInvoiceResult.getString("invoiceNumber")); |
|
|
|
if (checkInvoiceResult != null && !checkInvoiceResult.containsKey("code") && !checkInvoiceResult.containsKey("cyjg")) { |
|
|
|
log.info("补充查验的结果为:{}", checkInvoiceResult); |
|
|
|
checkInvoiceResult.put("invoiceNo", checkInvoiceResult.getString("invoiceNumber")); |
|
|
|
signSaveInvoiceInfoService.saveQueryInvoiceResult(checkInvoiceResult, "", "1", "business"); |
|
|
|
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<BaseTDxRecordInvoiceDetail> tDxRecordInvoiceDetails = convertToEleInvoiceDetail(invoice); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (tDxRecordInvoiceDetails != null && tDxRecordInvoiceDetails.size() > 0) { |
|
|
|
|
|
|
|
LambdaQueryWrapper<BaseTDxRecordInvoiceDetail> 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; |
|
|
|
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<BaseTDxRecordInvoiceDetail> convertToEleInvoiceDetail(SNInvoice invoice) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<SNInvoiceDetail> invoiceLineList = invoice.getInvoiceLineList(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<BaseTDxRecordInvoiceDetail> 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) { |
|
|
|
private TDxInvoiceReimburse convertToReimburse(SNInvoice invoice, TDxInvoiceReimburse reimburse, String fplxdm, String company) { |
|
|
|
reimburse.setId(IdUtils.nextId()); |
|
|
|
reimburse.setId(IdUtils.nextId()); |
|
|
|
reimburse.setInvoiceType(fplxdm); |
|
|
|
reimburse.setInvoiceType(fplxdm); |
|
|
|