using DS.Module.Core; using DS.WMS.Core.Application.Method; using DS.WMS.Core.Invoice.Dtos; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; namespace DS.WMS.Core.Invoice.Method { /// /// 发票开具服务 /// public sealed class InvoiceIssuanceService : ApplicationServiceBase { readonly InvoiceApiFox api; /// /// 初始化并加载配置 /// /// public InvoiceIssuanceService(IServiceProvider provider) : base(provider) { var config = provider.GetRequiredService(); api = new InvoiceApiFox(config); } /// /// 发起开票请求 /// /// 开票的发票信息 /// public async Task> InitiateAsync(params Entity.Invoice[] invoices) { //请求参数设置 InvoiceIssuanceRequest request = new(); request.order = invoices.Select(x => new InvoiceInfo { invoiceType = ((int)x.Type).ToString(), orderNo = x.BillNO, email = x.Email, buyerTaxNum = x.TaxID, buyerName = x.InvoiceHeader, buyerAddress = x.CustomerAddress, buyerTel = x.CustomerPhone, gmfkhh = x.CustomerBankName, gmfzh = x.CustomerAccount, skyhmc = x.BankName, skyhzh = x.Account, checker = x.Checker, payee = x.Payee, //---------金额项--------- hjse = x.InvoiceAmount * x.TaxRate, hjje = x.InvoiceAmount - x.InvoiceAmount * x.TaxRate, jshj = x.InvoiceAmount, clerk = x.CreateUserName, //开票人 kprzjhm = "", //证件号 kprzjlx = "201", //身份证, //---------发票明细--------- invoiceDetail = x.InvoiceDetails.Select(y => new InvoiceDetailInfo { mxxh = x.InvoiceDetails.IndexOf(y) + 1, xmmc = y.Name, spfwjc = string.Empty, specType = y.Specification, unit = y.Unit, num = y.Quantity.ToString(), taxExcludedAmount = y.UnitPrice, taxRate = y.TaxRate.ToString(), tax = y.TaxAmount, taxIncludedAmount = y.TaxUnitPrice, goodsCode = "", //商品和服务税收分类合并编码 invoiceLineProperty = "00" }).ToList() }).ToList(); var result = await api.PostAsync>("/api/Invoice/services", request); if (!result.Succeeded) return DataResult.Failed(result.Message, result.MultiCode); var invResult = result.Data; if (invResult.Success) { return DataResult.Success(invResult.Data); } else { if (invResult.Code == 1) return await InitiateAsync(invoices); return DataResult.Failed(invResult.Message); } } /// /// 添加租户信息 /// /// 租户信息 /// /// 为null时引发。 public async Task AddTenantAsync(Tenant tenant) { ArgumentNullException.ThrowIfNull(tenant, nameof(tenant)); var result = await api.PostAsync("/api/Login/AddTenant", tenant); return result.Data; } } }