Commit c8f1af62 authored by hanfeng's avatar hanfeng

开票

parent f0606e79
......@@ -25,9 +25,11 @@ public class Invoice {
private String orderId;
/**
* 公司代码
* 发票订单表id
*/
private String companyCode;
private Integer orderInvoiceId;
/**
* 发票订单号
......@@ -35,11 +37,18 @@ public class Invoice {
private String orderNo;
/**
* 公司代码
*/
private String companyCode;
/**
* 机构代码
*/
private String orgCode;
/**
* 发票代码
*/
......
......@@ -18,13 +18,17 @@ public class InvoiceVo {
* 发票分类:01 专票,02 货物运输业增值税专用发票,03 机动车销售统一发票,
* 04 增值税普通发票,10 增值税普通发票(电子),11 增值税普通发票(卷票),14 增值税普通发票(卷票)
*/
private Integer invoiceCategory=10;
private Integer invoiceCategory = 10;
/**
* 订单id :多个以逗号隔开
*/
private String orderId;
/**
* 发票订单表id
*/
private Integer orderInvoiceId;
/**
* 备注
......@@ -56,13 +60,13 @@ public class InvoiceVo {
* 开票内容
*/
private String content;
/**
* 购方手机
*/
private String purchaserPhone;
private List<OrderData> orders;
......
......@@ -82,7 +82,7 @@ public class InvoiceBiz extends BaseBiz<InvoiceMapper, Invoice> {
* 推送方式:-1,不推送;0,邮箱;1,手机(默认);2,邮箱、手机
*/
@Value("${invoice.pushMode}")
private Integer pushMode = 2;
private Integer pushMode;
private static final ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(8);
/**
......@@ -113,6 +113,10 @@ public class InvoiceBiz extends BaseBiz<InvoiceMapper, Invoice> {
* @throws Exception
*/
public String Invoicing(InvoiceVo invoiceVo) throws Exception {
//没有填写邮箱不需要进行推送
if (StringUtils.isBlank(invoiceVo.getPurchaserEmail())) {
pushMode = -1;
}
Invoice invoice = new Invoice();
long on = snowflakeIdWorker.nextId();
......@@ -127,6 +131,7 @@ public class InvoiceBiz extends BaseBiz<InvoiceMapper, Invoice> {
invoice.setReviewer(checker);
invoice.setIssuer(clerk);
invoice.setPushMode(pushMode);
Date invoiceDate = new Date();
invoice.setCreateTime(invoiceDate);
invoice.setInvoiceDate(invoiceDate);
......@@ -157,24 +162,24 @@ public class InvoiceBiz extends BaseBiz<InvoiceMapper, Invoice> {
BigDecimal taxExcludedAmount = BigDecimal.ZERO;
BigDecimal taxIncludedAmount = BigDecimal.ZERO;
for (OrderData order : orders) {
if (order.getWithTaxFlag()==1) {
if (order.getWithTaxFlag() == 1) {
//含价税合计
BigDecimal taxIncluded = order.getPrice();
//税率
BigDecimal taxRate = order.getTaxRate();
//不含税单价
BigDecimal TaxFree = taxIncluded.divide(taxRate.add(new BigDecimal(1)),2,BigDecimal.ROUND_HALF_UP);
taxExcludedAmount=taxExcludedAmount.add(TaxFree);
taxIncludedAmount=taxIncludedAmount.add(taxIncluded);
}else {
BigDecimal TaxFree = taxIncluded.divide(taxRate.add(new BigDecimal(1)), 2, BigDecimal.ROUND_HALF_UP);
taxExcludedAmount = taxExcludedAmount.add(TaxFree);
taxIncludedAmount = taxIncludedAmount.add(taxIncluded);
} else {
//不含税单价
BigDecimal taxFree = order.getPrice();
//税率
BigDecimal taxRate = order.getTaxRate();
//含税单价
BigDecimal taxIncluded = taxFree.multiply(taxRate.add(new BigDecimal(1)));
taxExcludedAmount=taxExcludedAmount.add(taxFree);
taxIncludedAmount=taxIncludedAmount.add(taxIncluded);
taxExcludedAmount = taxExcludedAmount.add(taxFree);
taxIncludedAmount = taxIncludedAmount.add(taxIncluded);
}
}
invoice.setInvoiceAmount(taxExcludedAmount);
......@@ -186,21 +191,22 @@ public class InvoiceBiz extends BaseBiz<InvoiceMapper, Invoice> {
mapper.insert(invoice);
//异步查询开票结果
schedule(invoiceSerialNum, invoice.getId(),invoice.getOrderId(),null, 0, 5,TimeUnit.SECONDS);
schedule(invoiceSerialNum, invoice.getId(), invoice.getOrderId(), null, 0, 5, TimeUnit.SECONDS);
}
/**
* 或去查询结果
*
* @param invoiceSerialNum 发票流水号
* @param id 发票id
* @param orderId 订单id
* @param lastStatus 上一次产需到的开票状态
* @param count 已经查询过的次数
*/
public void queryInvoiceResult(String invoiceSerialNum, Integer id,String orderId,Integer lastStatus,Integer count) {
if (count==2){
public void queryInvoiceResult(String invoiceSerialNum, Integer id, String orderId, Integer lastStatus, Integer count) {
if (count == 2) {
InvoiceQueryError invoiceQueryError = new InvoiceQueryError();
invoiceQueryError.setInvoiceId(id);
invoiceQueryError.setInvoiceSerialNum(invoiceSerialNum);
......@@ -211,24 +217,24 @@ public class InvoiceBiz extends BaseBiz<InvoiceMapper, Invoice> {
}
List<Map<String, Object>> result = invoiceResult(invoiceSerialNum);
if (result==null){
schedule(invoiceSerialNum, id,orderId,null, ++count, 2,TimeUnit.HOURS);
if (result == null) {
schedule(invoiceSerialNum, id, orderId, null, ++count, 2, TimeUnit.HOURS);
return;
}
log.info("查询到的开票结果={}",result);
log.info("查询到的开票结果={}", result);
Map<String, Object> data = result.get(0);
Integer status = (Integer) data.get("status");
String invoiceFileUrl = (String) data.get("invoiceFileUrl");
String invoiceCode = (String) data.get("invoiceCode");
String invoiceNum = (String) data.get("invoiceNum");
String taxIncludedAmountStr = String.valueOf(data.get("taxIncludedAmount")) ;
String taxExcludedAmountStr = String.valueOf(data.get("taxExcludedAmount")) ;
String taxIncludedAmountStr = String.valueOf(data.get("taxIncludedAmount"));
String taxExcludedAmountStr = String.valueOf(data.get("taxExcludedAmount"));
Invoice invoice = new Invoice();
invoice.setId(id);
invoice.setStatus(status);
invoice.setUpdateTime(new Date());
if (StringUtils.isNotBlank(taxExcludedAmountStr)&&StringUtils.isNotBlank(taxIncludedAmountStr)) {
if (StringUtils.isNotBlank(taxExcludedAmountStr) && StringUtils.isNotBlank(taxIncludedAmountStr)) {
BigDecimal taxExcludedAmount = new BigDecimal(taxExcludedAmountStr);
BigDecimal taxIncludedAmount = new BigDecimal(taxIncludedAmountStr);
invoice.setInvoiceAmount(taxExcludedAmount);
......@@ -237,15 +243,15 @@ public class InvoiceBiz extends BaseBiz<InvoiceMapper, Invoice> {
invoice.setInvoiceSummaryAmountText(NumberToCN.number2CNMontrayUnit(taxIncludedAmount));
}
if (InvoiceStatusEum.ONGOING.getCode().equals(status) || InvoiceStatusEum.UNBILLED.getCode().equals(status)) {
schedule(invoiceSerialNum, id,orderId,status, ++count, 2,TimeUnit.HOURS);
}else if (InvoiceStatusEum.SUCCESS.getCode().equals(status)){
schedule(invoiceSerialNum, id, orderId, status, ++count, 2, TimeUnit.HOURS);
} else if (InvoiceStatusEum.SUCCESS.getCode().equals(status)) {
invoice.setInvoiceCode(invoiceCode);
invoice.setInvoiceNo(invoiceNum);
invoice.setPictureUrl(invoiceFileUrl);
setOrderInvoice(orderId, status, invoiceFileUrl);
}else {
setOrderInvoice(orderId, status,null);
} else {
setOrderInvoice(orderId, status, null);
}
mapper.updateByPrimaryKeySelective(invoice);
......@@ -253,6 +259,7 @@ public class InvoiceBiz extends BaseBiz<InvoiceMapper, Invoice> {
/**
* 设置订单发票表
*
* @param orderId 订单id
* @param status 发票查询状态
* @param invoiceFileUrl 发票pdf地址
......@@ -268,6 +275,7 @@ public class InvoiceBiz extends BaseBiz<InvoiceMapper, Invoice> {
/**
* 再次查询开票结果
*
* @param invoiceSerialNum
* @param id
* @param orderId
......@@ -276,9 +284,9 @@ public class InvoiceBiz extends BaseBiz<InvoiceMapper, Invoice> {
* @param time
* @param timeUnit
*/
public void schedule(String invoiceSerialNum, Integer id,String orderId,Integer lastStatus, int count, int time,TimeUnit timeUnit) {
public void schedule(String invoiceSerialNum, Integer id, String orderId, Integer lastStatus, int count, int time, TimeUnit timeUnit) {
executorService.schedule(() -> {
queryInvoiceResult(invoiceSerialNum, id,orderId,lastStatus, count);
queryInvoiceResult(invoiceSerialNum, id, orderId, lastStatus, count);
}, time, timeUnit);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment