Commit 2e30fc6a by 陶然

新增ICBC模板读取接口

parent 8488c713
......@@ -67,6 +67,7 @@
<EmbeddedResource Include="Content\Templates\Finances.InvoiceTitle.xlsx" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Content\Templates\Finances.Payment.Receipt.ICBC.xlsx" />
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
......
......@@ -19,5 +19,5 @@ using System.Runtime.InteropServices;
[assembly: AssemblyTrademark("Kivii,K5")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyVersion("5.4.2023.10260")]
[assembly: AssemblyFileVersion("5.4.2023.10260")]
[assembly: AssemblyVersion("5.4.2024.1110")]
[assembly: AssemblyFileVersion("5.4.2024.1110")]
......@@ -15,6 +15,69 @@ namespace Kivii.Finances.Addons
public bool success { get; set; }
}
[Api(Description = "读取Excel发票抬头")]
[RequiresAnyRole(SystemRoles.Everyone)]
public class InvoiceTitleReadExcel : RestfulExecution<InvoiceTitle>
{
public override object OnExecution(IRequest req, IResponse res)
{
(Request.Files.Count() < 1 || Request.Files == null).ThrowIfTrue("未找到excel文件!");
var httpFile = Request.Files[0];
ExcelPackage package = new ExcelPackage(Request.Files[0].InputStream);
(package.Workbook.Worksheets.Count == 0).ThrowIfTrue("未找到Sheet!");
var rtns = new ReadExcelResponse<InvoiceTitle>();
rtns.Results = new List<InvoiceTitle>();
try
{
var sheet = package.Workbook.Worksheets[1];
var end = sheet.Dimension.End.Row;
for (int i = 2; i <= end; i++)
{
#region 格式化Excel中每行数据,必填项若不符合验证条件就抛出异常
var eCompanyName = sheet.Cells[i, 2].Value;
if (eCompanyName == null)
{
throw new Exception($"Excel第{i}行第2列不可为空,请传入不重复的名称!");
}
var companyName = eCompanyName.ToString();
var eTaxNumber = sheet.Cells[i, 3].Value;
if (eTaxNumber == null)
{
throw new Exception($"Excel第{i}行第3列不可为空,请传入不重复的税号!");
}
var taxNumber = eTaxNumber.ToString();
var eCompanyAddress = sheet.Cells[i, 4].Value;
var companyAddress = eCompanyAddress == null ? string.Empty : eCompanyAddress.ToString();
var ePhone = sheet.Cells[i, 5].Value;
var phone = ePhone == null ? string.Empty : ePhone.ToString();
var eBankName = sheet.Cells[i, 6].Value;
var bankName = eBankName == null ? string.Empty : eBankName.ToString();
var eBankAccount = sheet.Cells[i, 7].Value;
var bankAccount = eBankAccount == null ? string.Empty : eBankAccount.ToString();
#endregion
var invoiceTitle = new InvoiceTitle();
invoiceTitle.CompanyName = companyName;
invoiceTitle.TaxNumber = taxNumber;
invoiceTitle.CompanyAddress = companyAddress;
invoiceTitle.Phone = phone;
invoiceTitle.BankName = bankName;
invoiceTitle.BankAccount = bankAccount;
if (!rtns.Results.Exists(o => o.CompanyName == invoiceTitle.CompanyName)) rtns.Results.Add(invoiceTitle);
}
}
catch (Exception ex)
{
throw ex;
}
rtns.Total = rtns.Results.Count;
rtns.success = true;
return rtns;
}
}
[Api(Description = "读取Excel收款流水")]
[RequiresAnyRole(SystemRoles.Everyone)]
public class PaymentReadReceiptExcel : RestfulExecution<Payment>
......@@ -143,9 +206,9 @@ namespace Kivii.Finances.Addons
}
}
[Api(Description = "读取Excel发票抬头")]
[Api(Description = "读取工行Excel收款流水")]
[RequiresAnyRole(SystemRoles.Everyone)]
public class InvoiceTitleReadExcel : RestfulExecution<InvoiceTitle>
public class PaymentReadIcbcReceiptExcel : RestfulExecution<Payment>
{
public override object OnExecution(IRequest req, IResponse res)
{
......@@ -154,46 +217,113 @@ namespace Kivii.Finances.Addons
ExcelPackage package = new ExcelPackage(Request.Files[0].InputStream);
(package.Workbook.Worksheets.Count == 0).ThrowIfTrue("未找到Sheet!");
var rtns = new ReadExcelResponse<InvoiceTitle>();
rtns.Results = new List<InvoiceTitle>();
var rtns = new ReadExcelResponse<Payment>();
rtns.Results = new List<Payment>();
try
{
var sheet = package.Workbook.Worksheets[1];
var end = sheet.Dimension.End.Row;
for (int i = 2; i <= end; i++)
for (int i = 3; i <= end; i++)
{
#region 格式化Excel中每行数据,必填项若不符合验证条件就抛出异常
var eCompanyName = sheet.Cells[i, 2].Value;
if (eCompanyName == null)
var eSerialNumber = sheet.Cells[i, 1].Value;
if (eSerialNumber == null)
{
throw new Exception($"Excel第{i}行第2列不可为空,请传入不重复的名称!");
throw new Exception($"Excel第{i}行第1列不可为空,请传入不重复的流水号!");
}
var companyName = eCompanyName.ToString();
var eTaxNumber = sheet.Cells[i, 3].Value;
if (eTaxNumber == null)
var serialNumber = eSerialNumber.ToString();
var ePayerName = sheet.Cells[i, 3].Value;
if (ePayerName == null)
{
throw new Exception($"Excel第{i}行第3列不可为空,请传入不重复的税号!");
throw new Exception($"Excel第{i}行第3列不可为空,请传入付款单位!");
}
var taxNumber = eTaxNumber.ToString();
var eCompanyAddress = sheet.Cells[i, 4].Value;
var companyAddress = eCompanyAddress == null ? string.Empty : eCompanyAddress.ToString();
var ePhone = sheet.Cells[i, 5].Value;
var phone = ePhone == null ? string.Empty : ePhone.ToString();
var eBankName = sheet.Cells[i, 6].Value;
var bankName = eBankName == null ? string.Empty : eBankName.ToString();
var eBankAccount = sheet.Cells[i, 7].Value;
var bankAccount = eBankAccount == null ? string.Empty : eBankAccount.ToString();
var payerName = ePayerName.ToString();
var type= PaymentType.Bank;
//var eType = sheet.Cells[i, 4].Value;
//if (eType == null)
//{
// eType = PaymentType.Bank;
// //throw new Exception($"Excel第{i}行第4列不可为空,请选择指定类型!");
//}
//if (!Enum.TryParse(eType.ToString(), true, out PaymentType type))
//{
// throw new Exception($"Excel第{i}行第4列类型不正确,请选择指定类型!");
//}
if (type != PaymentType.Bank && type != PaymentType.Cash && type != PaymentType.Pos && type != PaymentType.AliPay && type != PaymentType.WeChat)
{
throw new Exception($"Excel第{i}行第4列类型不正确,请选择指定类型!");
}
var eAmount = sheet.Cells[i, 4].Value;
if (eAmount == null)
{
throw new Exception($"Excel第{i}行第4列不可为空,请传入发生金额!");
}
if (!Decimal.TryParse(eAmount.ToString(), out var amount))
{
throw new Exception($"Excel第{i}行第4列金额格式不正确!");
}
if (amount <= 0)
{
throw new Exception($"Excel第{i}行第4列金额不能小于等于零!");
}
var currency = CurrencyUnit.CNY;
//var eCurrency = sheet.Cells[i, 6].Value;
//if (eCurrency == null)
//{
// eCurrency = CurrencyUnit.CNY;
// //throw new Exception($"Excel第{i}行第6列不可为空,请传入货币单位!");
//}
//if (!Enum.TryParse(eCurrency.ToString(), true, out CurrencyUnit currency))
//{
// throw new Exception($"Excel第{i}行第6列货币单位格式不正确!");
//}
if (currency != CurrencyUnit.CNY)
{
throw new Exception($"Excel第{i}行第6列货币单位格式不正确,请选择指定货币单位!");
}
var eOperateDate = sheet.Cells[i, 2].Value;
if (eOperateDate == null)
{
throw new Exception($"Excel第{i}行第2列不可为空,请传入交易日期!");
}
//string operate = string.Empty;
//var eOperateTime = sheet.Cells[i, 8].Value;
//if (eOperateTime == null)
//{
// operate = eOperateDate.ToString();
// //throw new Exception($"Excel第{i}行第8列不可为空,请传入交易时间!");
//}
//else
//{
// operate = $"{eOperateDate} {eOperateTime}";
//}
if (!DateTime.TryParse(eOperateDate.ToString(), out DateTime operateTime))
{
throw new Exception($"Excel第{i}行第2列交易日期格式不正确!");
}
var eBank = sheet.Cells[i, 6].Value;
var bank = eBank == null ? string.Empty : eBank.ToString();
var eBankNumber = sheet.Cells[i, 5].Value;
var bankNumber = eBankNumber == null ? string.Empty : eBankNumber.ToString();
var eSummary = sheet.Cells[i, 10].Value;
var summary = eSummary == null ? string.Empty : eSummary.ToString();
var eRemark = sheet.Cells[i, 12].Value;
var remark = eRemark == null ? string.Empty : eRemark.ToString();
#endregion
var invoiceTitle = new InvoiceTitle();
invoiceTitle.CompanyName = companyName;
invoiceTitle.TaxNumber = taxNumber;
invoiceTitle.CompanyAddress = companyAddress;
invoiceTitle.Phone = phone;
invoiceTitle.BankName = bankName;
invoiceTitle.BankAccount = bankAccount;
if (!rtns.Results.Exists(o => o.CompanyName == invoiceTitle.CompanyName)) rtns.Results.Add(invoiceTitle);
var payment = new Payment();
payment.Metadata = new Dictionary<string, string>();
payment.SerialNumber = serialNumber;
payment.Type = type;
payment.Currency = currency;
payment.OperateTime = operateTime;
payment.Amount = amount;
payment.PayerName = payerName;
payment.PayerAccountName = bank;
payment.PayerAccountSerialNumber = bankNumber;
payment.Summary = summary;
payment.Remark = remark;
rtns.Results.Add(payment);
}
}
catch (Exception ex)
......
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