诺诺开票
最编程
2024-05-25 08:35:24
...
1 /// <summary>
2 /// 申请诺诺电子发票
3 /// </summary>
4 /// <param name="applySource">1:支付完自动开票;2:手动选择小订单开票</param>
5 /// <returns></returns>
6 public async Task ApplyEInvoice(string orderNo, Guid invoiceTitleId, int applySource)
7 {
8 try
9 {
10 var orderDetailList = await _orderDetailRepository.GetListAsync(f => f.OrderNo == orderNo);
11 if (applySource == 2)
12 {
13 orderDetailList = await _orderDetailRepository.GetListAsync(f => f.OrderDetailNo == orderNo);
14 }
15 if (orderDetailList != null)
16 {
17 var invoiceTitle = await _invoiceTitleRepository.GetAsync(invoiceTitleId);
18 if (invoiceTitle != null)
19 {
20 foreach (var orderDetail in orderDetailList)
21 {
22 var fpkjModel = _fpkjRequestOptions.Value;
23 fpkjModel.buyerName = invoiceTitle.Name;
24 fpkjModel.buyerTaxNum = invoiceTitle.TaxNumber;
25 fpkjModel.buyerTel = invoiceTitle.Mobile;
26 fpkjModel.buyerAddress = invoiceTitle.Address;
27 fpkjModel.buyerAccount = invoiceTitle.Bank + invoiceTitle.BankNumber;
28 fpkjModel.orderNo = orderDetail.OrderDetailNo;
29 fpkjModel.invoiceDate = orderDetail.CreationTime.ToString("yyyy-MM-dd HH:mm:ss");
30 fpkjModel.buyerPhone = invoiceTitle.SendPhoneNumber; //购方手机(pushMode为1或2时,此项必填
31 fpkjModel.email = invoiceTitle.SendEmailAddress; //推送邮箱 推送邮箱(pushMode为0或2时,此项为必填,同时受企业资质是否必填控制)
32 fpkjModel.pushMode = "2"; //推送方式:-1;不推送;0;邮箱;1;手机(默认); 2;邮箱、手机
33 fpkjModel.invoiceType = "1"; //蓝票
34 fpkjModel.invoiceLine = "pc"; //电子发票(普通发票)-即数电普票(电子)
35 fpkjModel.invoiceDetail = new List<InvoiceDetail>()
36 {
37 new InvoiceDetail()
38 {
39 taxIncludedAmount = orderDetail.OrderAmount.ToString(),
40 withTaxFlag = "1",
41 num = "1"
42 },
43 };
44
45 //string str = await _openInvoiceManager.GetEInvoiceTokenAsync();
46 //var pxResponseResult = JsonConvert.DeserializeObject<PxResponseResult<JYEInvoiceTokenResponse>>(str);
47 //var tokenInfo = pxResponseResult.Data;
48
49 (string invoiceSerialNum, string message) openInvoiceResponse = _openInvoiceManager.OpenInvoice(fpkjModel, fpkjModel.salerTaxNum);
50 Logger.LogInformation("申请诺诺电子发票:流水号:" + openInvoiceResponse.invoiceSerialNum + ",描述:" + openInvoiceResponse.message);
51 if (!string.IsNullOrEmpty(openInvoiceResponse.invoiceSerialNum) || openInvoiceResponse.message == "订单编号或流水号不能重复")
52 {
53 var openInvoice = await _openInvoiceRepository.FirstOrDefaultAsync(f => f.OrderNo == orderDetail.OrderDetailNo);
54 if (openInvoice == null)
55 {
56 OpenInvoiceRecord openInvoiceRecord = new OpenInvoiceRecord()
57 {
58 InvoiceNature = invoiceTitle.InvoiceNature,
59 InvoiceStatus = (EnumInvoiceStatus)20,
60 OrderNo = orderDetail.OrderDetailNo,
61 PayAmount = orderDetail.OrderAmount,
62 PurchaserInvoiceTitle = invoiceTitle.Name,
63 PurchaserIdTaxpayer = invoiceTitle.TaxNumber,
64 PurchaserAddressMobile = invoiceTitle.Mobile,
65 PurchaserBank = invoiceTitle.Bank,
66 PurchaserBankNumber = invoiceTitle.BankNumber,
67 UserEmail = invoiceTitle.SendEmailAddress,
68 UserMobile = invoiceTitle.SendPhoneNumber,
69 SerialNo = openInvoiceResponse.invoiceSerialNum
70 };
71 openInvoice = await _openInvoiceRepository.InsertAsync(openInvoiceRecord, true);
72 }
73
74 //查询发票:提交成功后,返回是开票提交成功,会立即返回开票流水号,这里电子票的状态不是最终状态,如果使用流水号查询开票信息,有可能是开票中状态
75 var query = QueryInvoiceAsync(openInvoice, fpkjModel.salerTaxNum);
76 }
77 }
78 }
79 else
80 {
81 Logger.LogInformation("申请诺诺电子发票:未查询到发票抬头信息");
82 }
83 }
84 else
85 {
86 Logger.LogInformation("申请诺诺电子发票:未查询到订单信息");
87 }
88 }
89 catch (Exception ex)
90 {
91 Logger.LogInformation("申请诺诺电子发票:" + ex.Message);
92 }
93 }
94
95 /// <summary>
96 /// 查询发票,完善发票信息
97 /// </summary>
98 private async Task QueryInvoiceAsync(OpenInvoiceRecord invoice, string taxNum)
99 {
100 // 等待 5 秒钟
101 await Task.Delay(TimeSpan.FromSeconds(10));
102 Logger.LogInformation($"查询发票信息:{JsonConvert.SerializeObject(invoice)}");
103 string fpckMsg = "查询发票信息";
104 while (!string.IsNullOrEmpty(fpckMsg))
105 {
106 List<string> serialNos = new List<string>();
107 if (!string.IsNullOrEmpty(invoice.SerialNo))
108 {
109 serialNos.Add(invoice.SerialNo);
110 }
111 List<string> orderNos = new List<string>()
112 {
113 invoice.OrderNo
114 };
115
116 (List<InvoicePdf> pdfList, string msg) fpInfoList = _openInvoiceManager.QueryInvoice(
117 new FpcxRequest()
118 {
119 serialNos = serialNos,
120 orderNos = orderNos
121 },
122 taxNum);
123 fpckMsg = fpInfoList.msg;
124
125 if (fpInfoList.pdfList != null && string.IsNullOrEmpty(fpckMsg))
126 {
127 Logger.LogInformation($"查询发票信息:pdfList:{JsonConvert.SerializeObject(fpInfoList.pdfList)}");
128 InvoicePdf invoicePdf = fpInfoList.pdfList.FirstOrDefault<InvoicePdf>();
129 if (!string.IsNullOrEmpty(invoicePdf.URL))
130 {
131 invoice.InvoiceUrl = invoicePdf.URL;
132 invoice.InvoiceCode = invoicePdf.FPDM;
133 invoice.InvoiceNo = invoicePdf.FPHM;
134 invoice.SerialNo = invoicePdf.FPLSH;
135 invoice.CheckCode = invoicePdf.JYM;
136 invoice.InvoiceStatus = (EnumInvoiceStatus)2;
137 invoice.InvoiceTime = DateTimeHelper.StampToDateTime(invoicePdf.KPRQ.ToString());
138
139 var temp = await _openInvoiceRepository.UpdateAsync(invoice);
140 if (temp != null)
141 {
142 return;
143 }
144 }
145 }
146 else
147 {
148 Logger.LogInformation($"查询发票信息:描述:{fpInfoList.msg},{JsonConvert.SerializeObject(fpInfoList.pdfList)}");
149 }
150 }
151 }
上一篇: 第 2 小组分项任务:记账软件需求分析
下一篇: 智能记账系统:颠覆传统,简化企业财务管理