Files
F8WebAI/backend/AgriculturalPlatform.Api/Dtos/InvoiceDtos.cs
T
fanhongcai c377421a3e 新增农户功能升级:身份证OCR/OSS上传、头像采集、同名村检测、Region热度排序及表单体验优化
- Region 表新增热度列,热门省份优先显示
- 区县下拉按地级市分组、已录区县优先、支持全省搜索
- 组选择内置一组至二十组
- 银行卡号独立行+粗体预览,开户行独立行
- 新增农户类型:农户/个体户/合作社/经营集体/公司
- 身份证正反面支持高拍仪/摄像头OCR与手机扫码上传,附件存本地/OSS
- 新增农户头像采集组件(摄像头/本地上传),预留人脸识别收购扩展
- 同名村弹窗提醒(防选错乡镇)
- 编辑窗体禁止遮罩/Esc误关,整体加宽适配高频操作
- 修复二维码局域网手机无法访问(监听0.0.0.0、局域网IP识别、Vite代理兜底)
2026-08-13 16:07:35 +08:00

51 lines
2.6 KiB
C#

using AgriculturalPlatform.Api.Models;
namespace AgriculturalPlatform.Api.Dtos;
public record InvoiceDto(
int Id, string InvoiceNo, string? BatchNo, string InvoiceKind,
int FarmerId, string FarmerName, string? FarmerIdCard,
int PurchaserOrgId, string PurchaserOrgName, int? PurchaseOrderId, string? OrderNo,
int ProductId, string ProductName, decimal Quantity, string Unit, decimal UnitPrice,
decimal Amount, decimal TaxRate, decimal TaxAmount, DateTime IssueDate,
string Status, string? OperatorName, DateTime? ReversedAt, string ReverseReason, DateTime CreatedAt);
/// <summary>开具销售发票:可指定收购单,也可手工录入</summary>
public record InvoiceCreateRequest(
int FarmerId, int PurchaserOrgId, int ProductId, int? PurchaseOrderId,
decimal Quantity, string Unit, decimal UnitPrice, decimal Amount,
decimal TaxRate = 0, string InvoiceKind = "销售发票");
/// <summary>发票作废</summary>
public record InvoiceReverseRequest(string Reason);
/// <summary>开票结果回填:Status 取值 Issued/Failed/Abnormal</summary>
public record InvoiceResultRequest(string Status, string? Message = null);
/// <summary>收购单维度开票状态行(反向开票清单数据源:过磅称重有效收购单)</summary>
public record OrderInvoiceDto(
int Id, string OrderNo, DateTime? WeighOutAt,
int FarmerId, string FarmerName, string? FarmerIdCard,
int ProductId, string ProductName, string Unit, decimal NetWeight, decimal UnitPrice, decimal Amount,
int PurchaserOrgId, string PurchaserOrgName, string? PurchaserTaxNo,
int? InvoiceId, string? InvoiceNo, string? BatchNo, string InvoiceStatus, DateTime? IssueDate);
/// <summary>创建开票批次(批量开票)</summary>
public record CreateBatchRequest(string? From, string? To, long[] OrderIds);
/// <summary>开票批次进度</summary>
public record BatchProgressDto(string BatchNo, int Total, int Pending, int Issued, int Failed, int Abnormal, bool Done);
public static class InvoiceMappers
{
public static InvoiceDto ToDto(this Invoice i) => new(
i.Id, i.InvoiceNo, i.BatchNo, i.InvoiceKind,
i.FarmerId, i.Farmer?.Name ?? "", i.Farmer?.IdCard ?? "",
i.PurchaserOrgId, i.PurchaserOrg?.Name ?? "", i.PurchaseOrderId, i.PurchaseOrder?.OrderNo,
i.ProductId, i.Product?.Name ?? "", i.Quantity, i.Unit, i.UnitPrice,
i.Amount, i.TaxRate, i.TaxAmount, i.IssueDate,
i.Status.ToString(), i.Operator?.RealName ?? "", i.ReversedAt, i.ReverseReason, i.CreatedAt);
public static InvoiceDto[] ToDtos(this IEnumerable<Invoice> items) => items.Select(ToDto).ToArray();
}