Commit 2840ae43 authored by hanfeng's avatar hanfeng

开票

parent 7adc4a13
...@@ -8,7 +8,6 @@ import com.github.wxiaoqi.security.admin.entity.ModifiedUsers; ...@@ -8,7 +8,6 @@ import com.github.wxiaoqi.security.admin.entity.ModifiedUsers;
import com.github.wxiaoqi.security.admin.mapper.AppStaffUserMapper; import com.github.wxiaoqi.security.admin.mapper.AppStaffUserMapper;
import com.github.wxiaoqi.security.admin.vo.AppUserVo; import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.xxfc.platform.im.utils.StringUtil; import com.xxfc.platform.im.utils.StringUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -24,8 +23,8 @@ import java.util.List; ...@@ -24,8 +23,8 @@ import java.util.List;
* @author Administrator * @author Administrator
*/ */
@Service @Service
@RequiredArgsConstructor(onConstructor_ = {@Autowired})
@Slf4j @Slf4j
@RequiredArgsConstructor(onConstructor_ = {@Autowired})
public class AppStaffUserBiz extends BaseBiz<AppStaffUserMapper, AppStaffUser> { public class AppStaffUserBiz extends BaseBiz<AppStaffUserMapper, AppStaffUser> {
private final AppUserDetailBiz appUserDetailBiz; private final AppUserDetailBiz appUserDetailBiz;
private final Integer POSITION_ID=4; private final Integer POSITION_ID=4;
......
...@@ -29,6 +29,12 @@ public class Invoice { ...@@ -29,6 +29,12 @@ public class Invoice {
*/ */
private String companyCode; private String companyCode;
/**
* 发票订单号
*/
private String orderNo;
/** /**
* 机构代码 * 机构代码
*/ */
...@@ -150,10 +156,10 @@ public class Invoice { ...@@ -150,10 +156,10 @@ public class Invoice {
* 开票人 * 开票人
*/ */
private String issuer; private String issuer;
/** // /**
* 发票状态 // * 发票状态
*/ // */
private Integer invoiceStatus; // private Integer invoiceStatus;
/** /**
* 附件 * 附件
*/ */
...@@ -175,7 +181,7 @@ public class Invoice { ...@@ -175,7 +181,7 @@ public class Invoice {
*/ */
private Integer validState; private Integer validState;
/** /**
* 状态 * 开票状态 0:未开票;1:开票中;2:为开票成功;3:开票失败;
*/ */
private Integer status; private Integer status;
/** /**
......
...@@ -32,7 +32,6 @@ public class OrderData { ...@@ -32,7 +32,6 @@ public class OrderData {
*/ */
private Double taxRate; private Double taxRate;
private String specType;
/** /**
* 单位 * 单位
*/ */
......
...@@ -20,31 +20,12 @@ public class InvoiceVo { ...@@ -20,31 +20,12 @@ public class InvoiceVo {
*/ */
private Integer invoiceCategory=10; private Integer invoiceCategory=10;
// /**
// * 合计金额
// */
// private BigDecimal invoiceAmount;
//
// /**
// * 合计税额
// */
// private BigDecimal taxAmount;
//
// /**
// * 价税合计总额
// */
// private BigDecimal invoiceSummaryAmount;
//
// /**
// * 价税合计总额大写
// */
// private String invoiceSummaryAmountText;
/** /**
* 订单id :多个以逗号隔开 * 订单id :多个以逗号隔开
*/ */
private String orderId; private String orderId;
/** /**
* 备注 * 备注
*/ */
......
package com.xxfc.platform.universal.utils;
public class SnowflakeIdWorker {
// ==============================Fields==================
/** 开始时间截 (2019-01-07) */
private final long twepoch = 1578326400000L;
/** 机器id所占的位数 */
private final long workerIdBits = 5L;
/** 数据标识id所占的位数 */
private final long datacenterIdBits = 5L;
/** 支持的最大机器id,结果是31 (这个移位算法可以很快的计算出几位二进制数所能表示的最大十进制数) */
private final long maxWorkerId = -1L ^ (-1L << workerIdBits);
/** 支持的最大数据标识id,结果是31 */
private final long maxDatacenterId = -1L ^ (-1L << datacenterIdBits);
/** 序列在id中占的位数 */
private final long sequenceBits = 12L;
/** 机器ID向左移12位 */
private final long workerIdShift = sequenceBits;
/** 数据标识id向左移17位(12+5) */
private final long datacenterIdShift = sequenceBits + workerIdBits;
/** 时间截向左移22位(5+5+12) */
private final long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits;
/** 生成序列的掩码,这里为4095 (0b111111111111=0xfff=4095) */
private final long sequenceMask = -1L ^ (-1L << sequenceBits);
/** 工作机器ID(0~31) */
private long workerId;
/** 数据中心ID(0~31) */
private long datacenterId;
/** 毫秒内序列(0~4095) */
private long sequence = 0L;
/** 上次生成ID的时间截 */
private long lastTimestamp = -1L;
//==============================Constructors====================
/**
* 构造函数
* @param workerId 工作ID (0~31)
* @param datacenterId 数据中心ID (0~31)
*/
public SnowflakeIdWorker(long workerId, long datacenterId) {
if (workerId > maxWorkerId || workerId < 0) {
throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId));
}
if (datacenterId > maxDatacenterId || datacenterId < 0) {
throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId));
}
this.workerId = workerId;
this.datacenterId = datacenterId;
}
// ==============================Methods=================================
/**
* 获得下一个ID (该方法是线程安全的)
* @return SnowflakeId
*/
public synchronized long nextId() {
long timestamp = timeGen();
//如果当前时间小于上一次ID生成的时间戳,说明系统时钟回退过这个时候应当抛出异常
if (timestamp < lastTimestamp) {
throw new RuntimeException(
String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp));
}
//如果是同一时间生成的,则进行毫秒内序列
if (lastTimestamp == timestamp) {
sequence = (sequence + 1) & sequenceMask;
//毫秒内序列溢出
if (sequence == 0) {
//阻塞到下一个毫秒,获得新的时间戳
timestamp = tilNextMillis(lastTimestamp);
}
}
//时间戳改变,毫秒内序列重置
else {
sequence = 0L;
}
//上次生成ID的时间截
lastTimestamp = timestamp;
//移位并通过或运算拼到一起组成64位的ID
return ((timestamp - twepoch) << timestampLeftShift) //
| (datacenterId << datacenterIdShift) //
| (workerId << workerIdShift) //
| sequence;
}
/**
* 阻塞到下一个毫秒,直到获得新的时间戳
* @param lastTimestamp 上次生成ID的时间截
* @return 当前时间戳
*/
protected long tilNextMillis(long lastTimestamp) {
long timestamp = timeGen();
while (timestamp <= lastTimestamp) {
timestamp = timeGen();
}
return timestamp;
}
/**
* 返回以毫秒为单位的当前时间
* @return 当前时间(毫秒)
*/
protected long timeGen() {
return System.currentTimeMillis();
}
//==============================Test=============================================
/** 测试 */
public static void main(String[] args) {
SnowflakeIdWorker idWorker = new SnowflakeIdWorker(0, 0);
for (int i = 0; i < 1000; i++) {
long id = idWorker.nextId();
System.out.println(Long.toBinaryString(id));
System.out.println(id);
}
}
}
\ No newline at end of file
...@@ -111,6 +111,12 @@ ...@@ -111,6 +111,12 @@
<artifactId>open-sdk</artifactId> <artifactId>open-sdk</artifactId>
<version>1.0.3</version> <version>1.0.3</version>
</dependency> </dependency>
<dependency>
<groupId>com.xxfc.platform</groupId>
<artifactId>xx-order-api</artifactId>
<version>2.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package com.xxfc.platform.universal.controller; package com.xxfc.platform.universal.controller;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil;
import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController; import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.universal.entity.Invoice; import com.xxfc.platform.universal.entity.Invoice;
import com.xxfc.platform.universal.entity.vo.InvoiceVo; import com.xxfc.platform.universal.entity.vo.InvoiceVo;
import com.xxfc.platform.universal.service.InvoiceBiz; import com.xxfc.platform.universal.service.InvoiceBiz;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
...@@ -23,9 +17,7 @@ import java.util.Map; ...@@ -23,9 +17,7 @@ import java.util.Map;
* @Description: * @Description:
*/ */
@RestController @RestController
//@IgnoreUserToken
@RequestMapping("/invoice") @RequestMapping("/invoice")
@RequiredArgsConstructor(onConstructor_ ={@Autowired} )
public class InvoiceController extends BaseController<InvoiceBiz, Invoice> { public class InvoiceController extends BaseController<InvoiceBiz, Invoice> {
......
...@@ -6,6 +6,7 @@ import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig; ...@@ -6,6 +6,7 @@ import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil; import com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil;
import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo; import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.xxfc.platform.order.feign.OrderFeign;
import com.xxfc.platform.universal.constant.InvoiceStatusEum; import com.xxfc.platform.universal.constant.InvoiceStatusEum;
import com.xxfc.platform.universal.entity.Invoice; import com.xxfc.platform.universal.entity.Invoice;
import com.xxfc.platform.universal.entity.OrderData; import com.xxfc.platform.universal.entity.OrderData;
...@@ -13,8 +14,9 @@ import com.xxfc.platform.universal.entity.vo.InvoiceVo; ...@@ -13,8 +14,9 @@ import com.xxfc.platform.universal.entity.vo.InvoiceVo;
import com.xxfc.platform.universal.mapper.InvoiceMapper; import com.xxfc.platform.universal.mapper.InvoiceMapper;
import com.xxfc.platform.universal.service.invoice.InvoiceDao; import com.xxfc.platform.universal.service.invoice.InvoiceDao;
import com.xxfc.platform.universal.utils.NumberToCN; import com.xxfc.platform.universal.utils.NumberToCN;
import com.xxfc.platform.universal.utils.SnowflakeIdWorker;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.concurrent.BasicThreadFactory; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
...@@ -35,21 +37,28 @@ import java.util.concurrent.TimeUnit; ...@@ -35,21 +37,28 @@ import java.util.concurrent.TimeUnit;
* @Description: * @Description:
*/ */
@Service @Service
@RequiredArgsConstructor(onConstructor_ = {@Autowired}) @Slf4j
@RequiredArgsConstructor(onConstructor = @_({@Autowired}))
public class InvoiceBiz extends BaseBiz<InvoiceMapper, Invoice> { public class InvoiceBiz extends BaseBiz<InvoiceMapper, Invoice> {
private final InvoiceDao invoiceDao; private final InvoiceDao invoiceDao;
private final UserAuthConfig userAuthConfig; private final UserAuthConfig userAuthConfig;
private final HttpServletRequest request; private final HttpServletRequest request;
private final UserAuthUtil userAuthUtil; private final UserAuthUtil userAuthUtil;
private final SnowflakeIdWorker snowflakeIdWorker = new SnowflakeIdWorker(0,0);
private final ThreadPoolTaskExecutor taskExecutor; private final ThreadPoolTaskExecutor taskExecutor;
private final OrderFeign orderFeign;
private static final String salerName = "欣新房车网络科技(广东)股份有限公司"; private static final String salerName = "欣新房车网络科技(广东)股份有限公司";
//正式 //正式
// private static final String salerTaxNum="91441900MA53C6713X"; // private static final String salerTaxNum="91441900MA53C6713X";
//测试
private static final String salerTaxNum = "339901999999142";
/**
* 测试
*/
private static final String salerTaxNum = "339901999999142";
private static final String salerTel = "13926892766"; private static final String salerTel = "13926892766";
private static final String salerAddress = "广东省东莞市松山湖园区科汇路1号1栋801室13926892766"; private static final String salerAddress = "广东省东莞市松山湖园区科汇路1号1栋801室13926892766";
private static final String salerAccount = "中国建设银行股份有限公司东莞虎门连升支行44050110140900000777"; private static final String salerAccount = "中国建设银行股份有限公司东莞虎门连升支行44050110140900000777";
...@@ -59,9 +68,12 @@ public class InvoiceBiz extends BaseBiz<InvoiceMapper, Invoice> { ...@@ -59,9 +68,12 @@ public class InvoiceBiz extends BaseBiz<InvoiceMapper, Invoice> {
private static final String checker = "邹冬梅"; private static final String checker = "邹冬梅";
//开票人 //开票人
private static final String clerk = "郑超"; private static final String clerk = "郑超";
// 推送方式:-1,不推送;0,邮箱;1,手机(默认);2,邮箱、手机
/**
* 推送方式:-1,不推送;0,邮箱;1,手机(默认);2,邮箱、手机
*/
private static final Integer pushMode = 2; private static final Integer pushMode = 2;
private static final ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(2); private static final ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(8);
public String getDutyParagraphByCode(String code) { public String getDutyParagraphByCode(String code) {
return invoiceDao.getDutyParagraphByCode(code); return invoiceDao.getDutyParagraphByCode(code);
...@@ -73,8 +85,11 @@ public class InvoiceBiz extends BaseBiz<InvoiceMapper, Invoice> { ...@@ -73,8 +85,11 @@ public class InvoiceBiz extends BaseBiz<InvoiceMapper, Invoice> {
public String Invoicing(InvoiceVo invoiceVo) throws Exception { public String Invoicing(InvoiceVo invoiceVo) throws Exception {
IJWTInfo infoFromToken = userAuthUtil.getInfoFromToken(userAuthConfig.getToken(request)); IJWTInfo infoFromToken = userAuthUtil.getInfoFromToken(userAuthConfig.getToken(request));
Invoice invoice = new Invoice(); Invoice invoice = new Invoice();
long on = snowflakeIdWorker.nextId();
BeanUtils.copyProperties(invoiceVo, invoice); BeanUtils.copyProperties(invoiceVo, invoice);
invoice.setOrderNo(String.valueOf(on));
invoice.setSalerName(salerName); invoice.setSalerName(salerName);
invoice.setSalerTaxCode(salerTaxNum); invoice.setSalerTaxCode(salerTaxNum);
invoice.setSalerAddressPhone(salerAddress); invoice.setSalerAddressPhone(salerAddress);
...@@ -83,19 +98,26 @@ public class InvoiceBiz extends BaseBiz<InvoiceMapper, Invoice> { ...@@ -83,19 +98,26 @@ public class InvoiceBiz extends BaseBiz<InvoiceMapper, Invoice> {
invoice.setReviewer(checker); invoice.setReviewer(checker);
invoice.setIssuer(clerk); invoice.setIssuer(clerk);
invoice.setPushMode(pushMode); invoice.setPushMode(pushMode);
invoice.setInvoiceDate(new Date()); Date invoiceDate = new Date();
invoice.setCreateTime(invoiceDate);
invoice.setInvoiceDate(invoiceDate);
invoice.setCreateBy(infoFromToken.getName());
List<OrderData> orders = invoiceVo.getOrders(); List<OrderData> orders = invoiceVo.getOrders();
//调用第三方开票 //调用第三方开票
String invoiceSerialNum = invoiceDao.Invoicing(invoice, orders); String invoiceSerialNum = invoiceDao.Invoicing(invoice, orders);
invoice.setInvoiceSerialNum(invoiceSerialNum); invoice.setInvoiceSerialNum(invoiceSerialNum);
invoice.setUserId(Integer.valueOf(infoFromToken.getId())); invoice.setUserId(Integer.valueOf(infoFromToken.getId()));
//保存到数据库 //保存到数据库
mapper.insert(invoice); mapper.insert(invoice);
//异步查询开票结果 //异步查询开票结果
taskExecutor.execute(()->{ executorService.schedule(() -> {
queryInvoiceResult(invoiceSerialNum,invoice.getId(),0); queryInvoiceResult(invoiceSerialNum, invoice.getId(), 0);
}); }, 10, TimeUnit.SECONDS);
return invoiceSerialNum; return invoiceSerialNum;
} }
...@@ -103,26 +125,37 @@ public class InvoiceBiz extends BaseBiz<InvoiceMapper, Invoice> { ...@@ -103,26 +125,37 @@ public class InvoiceBiz extends BaseBiz<InvoiceMapper, Invoice> {
return invoiceDao.invoiceResult(invoiceSerialNum); return invoiceDao.invoiceResult(invoiceSerialNum);
} }
public void queryInvoiceResult(String invoiceSerialNum, Integer id,Integer type) { public void queryInvoiceResult(String invoiceSerialNum, Integer id, Integer type) {
String result = invoiceResult(invoiceSerialNum); String result = invoiceResult(invoiceSerialNum);
JSONObject jsonObject = JSON.parseObject(result); JSONObject jsonObject = JSON.parseObject(result);
Map<String,Object> data = (Map<String, Object>) jsonObject.get("data"); List<Map<String, Object>> mapList = (List<Map<String, Object>>) jsonObject.get("result");
Integer status = (Integer) data.get("status"); Map<String, Object> data = mapList.get(0);
if (InvoiceStatusEum.ONGOING.getCode().equals(status)){ try {
executorService.schedule(()->{ Integer status = (Integer) data.get("status");
queryInvoiceResult(invoiceSerialNum,id,1); // if (type == 0) {
},2, TimeUnit.HOURS); // status = InvoiceStatusEum.ONGOING.getCode();
}else { // }
Invoice invoice = new Invoice(); if (InvoiceStatusEum.ONGOING.getCode().equals(status) && InvoiceStatusEum.ONGOING.getCode().equals(status)) {
invoice.setId(id); executorService.schedule(() -> {
invoice.setInvoiceStatus(status); queryInvoiceResult(invoiceSerialNum, id, 1);
invoice.setInvoiceCode(String.valueOf(data.get("invoiceCode"))); }, 2, TimeUnit.HOURS);
invoice.setInvoiceNo(String.valueOf(data.get("invoiceNum"))); } else {
invoice.setInvoiceAmount(BigDecimal.valueOf((Double) data.get("invoiceNum"))); Invoice invoice = new Invoice();
invoice.setTaxAmount(BigDecimal.valueOf((Double) data.get("taxIncludedAmount")).subtract(BigDecimal.valueOf((Double) data.get("invoiceNum")))); invoice.setId(id);
invoice.setInvoiceSummaryAmount(BigDecimal.valueOf((Double) data.get("taxIncludedAmount"))); invoice.setStatus(status);
invoice.setInvoiceSummaryAmountText(NumberToCN.number2CNMontrayUnit(BigDecimal.valueOf((Double) data.get("taxIncludedAmount")))); invoice.setInvoiceCode(String.valueOf(data.get("invoiceCode")));
mapper.updateByPrimaryKeySelective(invoice); invoice.setInvoiceNo(String.valueOf(data.get("invoiceNum")));
invoice.setInvoiceAmount(BigDecimal.valueOf(Double.valueOf(String.valueOf(data.get("taxExcludedAmount")))));
invoice.setTaxAmount(BigDecimal.valueOf(Double.valueOf(String.valueOf(data.get("taxIncludedAmount")))).subtract(BigDecimal.valueOf(Double.valueOf(String.valueOf(data.get("taxExcludedAmount"))))));
invoice.setInvoiceSummaryAmount(BigDecimal.valueOf(Double.valueOf(String.valueOf(data.get("taxIncludedAmount")))));
invoice.setInvoiceSummaryAmountText(NumberToCN.number2CNMontrayUnit(BigDecimal.valueOf(Double.valueOf(String.valueOf(data.get("taxIncludedAmount"))))));
invoice.setPictureUrl(String.valueOf(data.get("invoiceFileUrl")));
invoice.setUpdateTime(new Date());
mapper.updateByPrimaryKeySelective(invoice);
}
} catch (Exception e) {
log.error("查询开票结果={}", e.toString());
e.printStackTrace();
} }
} }
} }
...@@ -133,7 +133,7 @@ public class InvoiceDaoImpl implements InvoiceDao { ...@@ -133,7 +133,7 @@ public class InvoiceDaoImpl implements InvoiceDao {
map.put("remark", invoice.getRemark()); map.put("remark", invoice.getRemark());
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//销方信息 //销方信息
map.put("orderNo", invoice.getOrderId()); map.put("orderNo", invoice.getOrderNo());
map.put("invoiceDate",dateFormat.format(invoice.getInvoiceDate())); map.put("invoiceDate",dateFormat.format(invoice.getInvoiceDate()));
map.put("salerName", invoice.getSalerName()); map.put("salerName", invoice.getSalerName());
map.put("salerTaxNum", invoice.getSalerTaxCode()); map.put("salerTaxNum", invoice.getSalerTaxCode());
...@@ -160,18 +160,23 @@ public class InvoiceDaoImpl implements InvoiceDao { ...@@ -160,18 +160,23 @@ public class InvoiceDaoImpl implements InvoiceDao {
mx.put("price", String.valueOf(order.getPrice())); mx.put("price", String.valueOf(order.getPrice()));
mx.put("taxRate", String.valueOf(order.getTaxRate())); mx.put("taxRate", String.valueOf(order.getTaxRate()));
mx.put("unit", order.getUnit()); mx.put("unit", order.getUnit());
mx.put("specType",order.getSpecType()); mx.put("specType",order.getOrderName());
arrayList.add(mx); arrayList.add(mx);
} }
String token = getTokenFP(); String token = getTokenFP();
String jsonString = JSON.toJSONString(orderMap); String jsonString = JSON.toJSONString(orderMap);
//调用第三方接口 //调用第三方接口
String result = sdk.sendPostSyncRequest(url, senid, appKey2, appSecret2,token , taxnum2, method, jsonString); String result = sdk.sendPostSyncRequest(url, senid, appKey2, appSecret2,token , taxnum2, method, jsonString);
System.out.println(result); log.info("result={}",result);
//把字符串json数据转换为map //把字符串json数据转换为map
JSONObject jsonObject = JSON.parseObject(result); JSONObject jsonObject = JSON.parseObject(result);
Map<String,String> data = (Map<String, String>) jsonObject.get("result"); Map<String,String> data = (Map<String, String>) jsonObject.get("result");
return data.get("invoiceSerialNum"); String invoiceSerialNum = data.get("invoiceSerialNum");
if (StringUtils.isBlank(invoiceSerialNum)){
log.error("失败原因={}",result);
throw new BaseException("开票失败");
}
return invoiceSerialNum;
} }
@Override @Override
......
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