first commot
All checks were successful
Docker Build & Deploy / Build Docker Image (push) Successful in 8s
Docker Build & Deploy / Deploy to Production (push) Successful in 7s

This commit is contained in:
孙诚
2025-12-25 11:20:56 +08:00
commit 4526cc6396
104 changed files with 11070 additions and 0 deletions

25
Entity/BaseEntity.cs Normal file
View File

@@ -0,0 +1,25 @@
using Yitter.IdGenerator;
namespace Entity;
/// <summary>
/// 实体基类
/// </summary>
public abstract class BaseEntity
{
/// <summary>
/// 主键ID (雪花算法有序ID)
/// </summary>
[Column(IsPrimary = true)]
public long Id { get; set; } = YitIdHelper.NextId();
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; } = DateTime.Now;
/// <summary>
/// 更新时间
/// </summary>
public DateTime? UpdateTime { get; set; }
}

32
Entity/EmailMessage.cs Normal file
View File

@@ -0,0 +1,32 @@
namespace Entity;
/// <summary>
/// 邮件消息实体
/// </summary>
public class EmailMessage : BaseEntity
{
/// <summary>
/// 邮件主题
/// </summary>
public string Subject { get; set; } = string.Empty;
/// <summary>
/// 邮件发送者
/// </summary>
public string From { get; set; } = string.Empty;
/// <summary>
/// 邮件正文
/// </summary>
public string Body { get; set; } = string.Empty;
/// <summary>
/// 邮件HTML内容
/// </summary>
public string HtmlBody { get; set; } = string.Empty;
/// <summary>
/// 邮件接收时间
/// </summary>
public DateTime ReceivedDate { get; set; }
}

6
Entity/Entity.csproj Normal file
View File

@@ -0,0 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<PackageReference Include="FreeSql" />
<PackageReference Include="Yitter.IdGenerator" />
</ItemGroup>
</Project>

1
Entity/GlobalUsings.cs Normal file
View File

@@ -0,0 +1 @@
global using FreeSql.DataAnnotations;

View File

@@ -0,0 +1,47 @@
namespace Entity;
/// <summary>
/// 交易分类(层级结构:类型 -> 分类 -> 子分类)
/// </summary>
public class TransactionCategory : BaseEntity
{
/// <summary>
/// 分类名称
/// </summary>
public string Name { get; set; } = string.Empty;
/// <summary>
/// 父分类ID0表示顶级分类
/// </summary>
public long ParentId { get; set; }
/// <summary>
/// 交易类型(支出/收入)
/// </summary>
public TransactionType Type { get; set; }
/// <summary>
/// 层级1=类型级, 2=分类级, 3=子分类级)
/// </summary>
public int Level { get; set; }
/// <summary>
/// 排序号
/// </summary>
public int SortOrder { get; set; }
/// <summary>
/// 图标(可选)
/// </summary>
public string? Icon { get; set; }
/// <summary>
/// 是否启用
/// </summary>
public bool IsEnabled { get; set; } = true;
/// <summary>
/// 备注
/// </summary>
public string? Remark { get; set; }
}

View File

@@ -0,0 +1,85 @@
namespace Entity;
/// <summary>
/// 银行交易记录(由邮件解析生成)
/// </summary>
public class TransactionRecord : BaseEntity
{
/// <summary>
/// 卡号或账户标识
/// </summary>
public string Card { get; set; } = string.Empty;
/// <summary>
/// 交易原因/摘要
/// </summary>
public string Reason { get; set; } = string.Empty;
/// <summary>
/// 交易金额
/// </summary>
public decimal Amount { get; set; }
/// <summary>
/// 退款金额
/// </summary>
public decimal RefundAmount { get; set; }
/// <summary>
/// 交易后余额
/// </summary>
public decimal Balance { get; set; }
/// <summary>
/// 发生时间(邮件中的交易时间)
/// </summary>
public DateTime OccurredAt { get; set; }
/// <summary>
/// 原始邮件记录ID
/// </summary>
public long EmailMessageId { get; set; }
/// <summary>
/// 交易类型
/// </summary>
public TransactionType Type { get; set; }
/// <summary>
/// 交易分类
/// </summary>
public string Classify { get; set; } = string.Empty;
/// <summary>
/// 交易子分类
/// </summary>
public string SubClassify { get; set; } = string.Empty;
/// <summary>
/// 导入编号
/// </summary>
public string ImportNo { get; set; } = string.Empty;
/// <summary>
/// 导入来源
/// </summary>
public string ImportFrom { get; set; } = string.Empty;
}
public enum TransactionType
{
/// <summary>
/// 支出
/// </summary>
Expense = 0,
/// <summary>
/// 收入
/// </summary>
Income = 1,
/// <summary>
/// 不计入收支
/// </summary>
None = 2
}

27
Entity/WeatherForecast.cs Normal file
View File

@@ -0,0 +1,27 @@
namespace Entity;
/// <summary>
/// 天气预报实体
/// </summary>
public class WeatherForecast : BaseEntity
{
/// <summary>
/// 日期
/// </summary>
public DateOnly Date { get; set; }
/// <summary>
/// 摄氏温度
/// </summary>
public int TemperatureC { get; set; }
/// <summary>
/// 摄氏度转华氏度
/// </summary>
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
/// <summary>
/// 天气摘要
/// </summary>
public string? Summary { get; set; }
}