Commit 70037a12 authored by hanfeng's avatar hanfeng

发票

parent 22fd011a
package com.xxfc.platform.universal.entity;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
@Table(name = "invoice")
@ApiModel
public class Invoice {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
......@@ -54,7 +54,7 @@ public class Invoice {
* 发票分类:01 专票,02 货物运输业增值税专用发票,03 机动车销售统一发票,
* 04 增值税普通发票,10 增值税普通发票(电子),11 增值税普通发票(卷票),14 增值税普通发票(卷票)
*/
private String invoiceCategory;
private Integer invoiceCategory;
/**
* 合计金额
......@@ -183,12 +183,23 @@ public class Invoice {
* 发票图片链接
*/
private String pictureUrl;
/**
* 开票类型:1-正票;2-红票
*/
private Integer invoiceType=0;
/**
* 开票内容
*/
private String content;
/**
* 推送方式:-1,不推送;0,邮箱;1,手机(默认);2,邮箱、手机
*/
private Integer pushMode=2;
private String createBy;
private String updateBy;
private Date createTime;
private Date updateTime;
@Column(insertable = false,updatable = false)
private List<OrderData> orders;
}
package com.xxfc.platform.universal.entity;
import lombok.Data;
import java.math.BigDecimal;
/**
* @Auther: Administrator
* @Date: 2020/1/3 11:20
* @Description:
*/
@Data
public class OrderData {
/**
* 产品名称
*/
private String orderName;
/**
* 产品数量
*/
private Integer num;
/**
* 是否含税价格
*/
private Integer withTaxFlag=1;
/**
* 产品单价
*/
private BigDecimal price;
/**
* 税率
*/
private Double taxRate;
/**
* 单位
*/
private String unit="次";
}
package com.xxfc.platform.universal.entity.vo;
import com.xxfc.platform.universal.entity.OrderData;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* @Auther: Administrator
* @Date: 2020/1/3 14:43
* @Description:
*/
@Data
public class InvoiceVo {
/**
* 订单id :多个以逗号隔开
*/
private String orderId;
/**
* 发票分类:01 专票,02 货物运输业增值税专用发票,03 机动车销售统一发票,
* 04 增值税普通发票,10 增值税普通发票(电子),11 增值税普通发票(卷票),14 增值税普通发票(卷票)
*/
private Integer invoiceCategory=10;
/**
* 合计金额
*/
private BigDecimal invoiceAmount;
/**
* 合计税额
*/
private BigDecimal taxAmount;
/**
* 价税合计总额
*/
private BigDecimal invoiceSummaryAmount;
/**
* 价税合计总额大写
*/
private String invoiceSummaryAmountText;
/**
* 备注
*/
private String remark;
/**
* 购买方名称
*/
private String purchaserName;
/**
* 购买方纳税人识别号
*/
private String purchaserTaxCode;
/**
* 购方邮箱
*/
private String purchaserEmail;
/**
* 购买方地址电话
*/
private String purchaserAddressPhone;
/**
* 购买方银行账号
*/
private String purchaserAccountBank;
/**
* 开票内容
*/
private String content;
/**
* 推送方式:-1,不推送;0,邮箱;1,手机(默认);2,邮箱、手机
*/
private Integer pushMode=2;
private List<OrderData> orders;
}
package com.xxfc.platform.universal.controller;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.universal.entity.Invoice;
import com.xxfc.platform.universal.entity.vo.InvoiceVo;
import com.xxfc.platform.universal.service.InvoiceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......@@ -16,6 +17,7 @@ import java.util.Map;
* @Description:
*/
@RestController
@IgnoreUserToken
@RequestMapping("/invoice")
public class InvoiceController {
......@@ -45,8 +47,8 @@ public class InvoiceController {
}
@PostMapping
public ObjectRestResponse Invoicing(@RequestBody Invoice invoice){
invoiceService.Invoicing(invoice);
public ObjectRestResponse Invoicing(@RequestBody InvoiceVo invoiceVo){
invoiceService.Invoicing(invoiceVo);
return ObjectRestResponse.succ();
}
}
......@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.google.common.collect.Lists;
import com.xxfc.platform.universal.entity.Invoice;
import com.xxfc.platform.universal.entity.OrderData;
import com.xxfc.platform.universal.service.Invoice.InvoiceDao;
import lombok.extern.slf4j.Slf4j;
import nuonuo.open.sdk.NNOpenSDK;
......@@ -45,6 +46,7 @@ public class InvoiceDaoImpl implements InvoiceDao {
private static final String appSecret2 = "901B543442BF41A1";
/**
* 给定的部分名获取税号
* @param name
......@@ -54,7 +56,7 @@ public class InvoiceDaoImpl implements InvoiceDao {
public List<Map<String, String>> corporateName(String name) {
NNOpenSDK sdk = NNOpenSDK.getIntance();
HashMap<String, String> map = new HashMap();
map.put("q", "name");
map.put("q", name);
String content = JSON.toJSONString(map);
//方法名
......@@ -96,6 +98,8 @@ public class InvoiceDaoImpl implements InvoiceDao {
return resultMap.get("kpCode");
}
@Override
public void Invoicing(Invoice invoice) {
......@@ -104,64 +108,52 @@ public class InvoiceDaoImpl implements InvoiceDao {
String method = "nuonuo.electronInvoice.requestBilling";
// SDK请求地址
String url = "https://sandbox.nuonuocs.cn/open/v1/services";
// 唯一标识,由企业自己生成32位随机码
String senid = UUID.randomUUID().toString().replace("-", "");
HashMap<String, Object> map = new HashMap<>();
HashMap<String, Map<String, Object>> orderMap = new HashMap<>();
orderMap.put("order", map);
map.put("buyerName", "欣新房车网络科技(广东)股份有限公司");
map.put("buyerTaxNum", "91441900MA53C6713X");
map.put("buyerTel", "13926892766");
map.put("buyerAddress", "广东省东莞市松山湖园区科汇路1号1栋801室");
map.put("buyerAccount", "中国建设银行股份有限公司东莞虎门连升支行44050110140900000777");
map.put("orderNo", "20190611094711010009");
map.put("invoiceDate", "2019-12-27 14:30:00");
map.put("clerk", "小弟");
map.put("salerName", "欣新房车网络科技(广东)股份有限公司");
map.put("salerTaxNum", "339901999999142");
map.put("salerTel", "13926892766");
map.put("salerAddress", "广东省东莞市松山湖园区科汇路1号1栋801室");
map.put("salerAccount", "中国建设银行股份有限公司东莞虎门连升支行44050110140900000777");
map.put("invoiceType", "1");
map.put("remark", "出差路费");
map.put("payee", "老老大");
map.put("checker", "老大");
map.put("pushMode", "2");
map.put("buyerPhone", "13691751141");
map.put("email", "1208472890@qq.com");
map.put("listFlag", "0");
map.put("listName", "房车租赁");
map.put("proxyInvoiceFlag", "0");
//购方信息
map.put("buyerName",invoice.getPurchaserName());
map.put("buyerTaxNum", invoice.getPurchaserTaxCode());
map.put("buyerTel", invoice.getPurchaserPhone());
map.put("buyerAddress", invoice.getPurchaserAddressPhone());
map.put("buyerAccount", invoice.getPurchaserAccountBank());
map.put("buyerPhone", invoice.getPurchaserPhone());
map.put("email", invoice.getPurchaserEmail());
map.put("remark", invoice.getRemark());
//销方信息
map.put("orderNo", invoice.getOrderId());
map.put("invoiceDate", new Date());
map.put("salerName", invoice.getSalerName());
map.put("salerTaxNum", invoice.getSalerTaxCode());
map.put("salerAddress", invoice.getSalerAddressPhone());
map.put("salerAccount",invoice.getSalerAccountBank());
map.put("clerk", invoice.getIssuer());
map.put("payee", invoice.getPayee());
map.put("checker", invoice.getReviewer());
//其他设置
map.put("pushMode", String.valueOf(invoice.getPushMode()));
map.put("invoiceType",String.valueOf(invoice.getInvoiceType()));
//订单信息
ArrayList<Map<String, String>> arrayList = Lists.newArrayList();
map.put("invoiceDetail", arrayList);
List<OrderData> orders = invoice.getOrders();
for (OrderData order : orders) {
HashMap<String, String> mx = new HashMap<>();
mx.put("goodsName", "房车租赁");
mx.put("num", "1");
mx.put("withTaxFlag", "0");
mx.put("price", "100");
mx.put("taxRate", "0.13");
mx.put("unit", "次");
mx.put("goodsName", invoice.getContent());
mx.put("num",String.valueOf(order.getNum()) );
//单价含税标志,0:不含税,1:含税
mx.put("withTaxFlag", String.valueOf(order.getWithTaxFlag()));
mx.put("price", String.valueOf(order.getPrice()));
mx.put("taxRate", String.valueOf(order.getTaxRate()));
mx.put("unit", order.getUnit());
arrayList.add(mx);
map.put("invoiceDetail", arrayList);
HashMap<String, String> mx2 = new HashMap<>();
mx2.put("goodsName", "房车租赁");
mx2.put("num", "1");
mx2.put("withTaxFlag", "1");
mx2.put("price", "100");
mx2.put("taxRate", "0.13");
mx2.put("unit", "次");
arrayList.add(mx2);
HashMap<String, String> mx3 = new HashMap<>();
mx3.put("goodsName", "房车租赁");
mx3.put("num", "1");
mx3.put("withTaxFlag", "1");
mx3.put("price", "100");
mx3.put("taxRate", "0.13");
mx3.put("unit", "次");
arrayList.add(mx3);
}
String jsonString = JSON.toJSONString(orderMap);
String result = sdk.sendPostSyncRequest(url, senid, appKey2, appSecret2, getTokenFP(), taxnum2, method, jsonString);
System.out.println(result);
......@@ -182,7 +174,6 @@ public class InvoiceDaoImpl implements InvoiceDao {
/**
* 获取诺诺发票token
*/
public String getTokenFP() {
return getToken(appKey2, appSecret2);
}
......@@ -199,7 +190,7 @@ public class InvoiceDaoImpl implements InvoiceDao {
if (StringUtils.isBlank(token)) {
throw new BaseException("获取极速开票token失败");
}
redisTemplate.opsForValue().set(appKey, token, 24, TimeUnit.HOURS);
redisTemplate.opsForValue().set(appKey, token, 23, TimeUnit.HOURS);
}
return token;
......
package com.xxfc.platform.universal.service;
import com.xxfc.platform.universal.entity.Invoice;
import com.xxfc.platform.universal.entity.vo.InvoiceVo;
import com.xxfc.platform.universal.service.Invoice.InvoiceDao;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -19,6 +21,19 @@ public class InvoiceService {
@Autowired
private InvoiceDao invoiceDao;
private static final String salerName="欣新房车网络科技(广东)股份有限公司";
private static final String salerTaxNum="91441900MA53C6713X";
private static final String salerTel="13926892766";
private static final String salerAddress="广东省东莞市松山湖园区科汇路1号1栋801室13926892766";
private static final String salerAccount="中国建设银行股份有限公司东莞虎门连升支行44050110140900000777";
//收款人
private static final String payee= "郑超";
//复核人
private static final String checker="邹冬梅";
//开票人
private static final String clerk="郑超";
public String getDutyParagraphByCode(String code) {
return invoiceDao.getDutyParagraphByCode(code);
}
......@@ -27,7 +42,16 @@ public class InvoiceService {
return invoiceDao.corporateName(name);
}
public void Invoicing(Invoice invoice) {
public void Invoicing(InvoiceVo invoiceVo) {
Invoice invoice = new Invoice();
BeanUtils.copyProperties(invoice,invoiceVo);
invoice.setSalerName(salerName);
invoice.setSalerTaxCode(salerTaxNum);
invoice.setSalerAddressPhone(salerAddress);
invoice.setSalerAccountBank(salerAccount);
invoice.setPayee(payee);
invoice.setReviewer(checker);
invoice.setIssuer(clerk);
invoiceDao.Invoicing(invoice);
}
}
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