using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace OASystem.Domain.Entities.Resource
{
///
/// 商邀公务AI
///
[SugarTable("Res_InvitationAI", "商邀公务AI")]
public class Res_InvitationAI: EntityBase
{
///
/// 名称
///
[SugarColumn(ColumnName = "InvName", ColumnDescription = "名称", IsNullable = true, ColumnDataType = "varchar(150)")]
public string InvName { get; set; }
///
/// 团组ID
/// 注:自定义命名时,GroupID = 0;使用团组名称时,GroupID = Grp_DelegationInfo.Id
///
[SugarColumn(ColumnName = "GroupId", ColumnDescription = "团组ID", IsNullable = true, ColumnDataType = "int")]
public int GroupId { get; set; }
///
/// ai 抓取信息存储(含本地数据信息)
///
[SugarColumn(ColumnName = "AiCrawledDetails", ColumnDescription = "ai 抓取信息存储(含本地数据信息)", IsJson = true, IsNullable = true, ColumnDataType = "varchar(max)")]
public List AiCrawledDetails { get; set; } = new List();
///
/// 词条信息
///
[SugarColumn(ColumnName = "Entries", ColumnDescription = "词条信息", IsJson = true, IsNullable = true, ColumnDataType = "varchar(max)")]
public EntryInfo EntryInfo { get; set; } = new EntryInfo();
}
///
/// 单位信息
///
public class InvitationAIInfo
{
///
/// Guid
///
public string Guid { get; set; }
///
/// 复选框是否选中
///
public bool IsChecked { get; set; } = false;
///
/// 数据来源
/// 0-本地数据;1-第三方AI接口数据;2-用户手动输入数据
///
public int Source { get; set; } = 0;
///
/// 归属区域
///
public string Region { get; set; }
///
/// 标准行业:信息技术、金融与财会、工业制造、医疗保健、政府与公共服务、消费与贸易
///
public string Industry { get; set; }
///
/// 名称(中文)
///
public string NameCn { get; set; }
///
/// 名称(英文)
///
public string NameEn { get; set; }
///
/// 地址
///
public string Address { get; set; }
///
/// 经营范围
///
public string Scope { get; set; }
///
/// 联系人
///
public string Contact { get; set; }
///
/// 联系电话
///
public string Phone { get; set; }
///
/// 联系邮箱
///
public string Email { get; set; }
///
/// 官网地址
///
public string SiteUrl { get; set; }
///
/// 文章地址
///
public List PostUrl { get; set; } = new List();
///
/// 推荐等级
///
public string RecLevel { get; set; }
///
/// 对接建议
///
public string IntgAdvice { get; set; }
///
/// 邮件信息
///
public EmailInfo EmailInfo { get; set; } = new EmailInfo();
///
/// 备注
///
public string Remark { get; set; }
///
/// 操作时间
///
public DateTime OperatedAt { get; set; }
///
/// 操作人
///
public string Operator { get; set; }
}
///
/// 新闻链接信息
///
public class PostNewsItem
{
public string Date { get; set; }
public string Description { get; set; }
public string Url { get; set; }
}
public class EntryInfo
{
///
/// 出访单位
///
public string OriginUnit { get; set; }
///
/// 拜访国家
///
public List TargetCountry { get; set; } = new List();
///
/// 行业信息
/// 信息技术、金融与财会、工业制造、医疗保健、政府与公共服务、消费与贸易
///
public List Industries { get; set; } = new List();
///
/// 规模类型
///
public List ScaleTypes { get; set; } = new List();
///
/// 是否需要华人单位背景
///
public bool IsBackground { get; set; } = false;
///
/// 出访目的
///
public string Objective { get; set; }
///
/// 数据条数
/// 每个国家获取数据总条数,默认20条
///
public int NeedCount { get; set; } = 20;
///
/// 其他规则
///
public string OtherConstraints { get; set; }
///
/// 操作时间
///
public DateTime OperatedAt { get; set; } = new DateTime();
///
/// 操作人
///
public string Operator { get; set; }
}
public class EmailInfo
{
///
/// 邮件标题
///
public string EmailTitle { get; set; }
///
/// 邮箱内容
///
public string EmailContent { get; set; }
///
/// 附件地址
///
public List AttachmentPaths { get; set; } = new List();
///
/// 发送状态
/// 1.未开始
/// 2.AI生成成功
/// 3.手动编辑
/// 4.发送完成
/// 5.发送失败
///
public int Status { get; set; } = 1;
///
/// 操作时间
///
public DateTime OperatedAt { get; set; }
///
/// 操作人
///
public string Operator { get; set; }
}
public class AICreateEmailInfo
{
public string Guid { get; set; }
public string NameCn { get; set; }
public string Scope { get; set; }
public string Subject { get; set; }
public string Content { get; set; }
}
public class CountryAIPormptInfo {
public string Country { get; set; }
public int Count { get; set; }
}
#region 行业信息
///
/// 行业信息
///
public class IndustryNode
{
public string Code { get; init; }
public string NameCn { get; init; }
public string NameEn { get; init; }
public string ParentCode { get; init; }
public List Children { get; init; } = new();
public string Keywords { get; init; }
public IndustryNode() { }
///
/// 静态缓存:扁平化字典,用于 O(1) 效率查找
///
private static readonly Dictionary _flatCache;
public static List Roots { get; }
static IndustryNode()
{
Roots = BuildInitialData();
// 预先扁平化所有节点,方便后续根据 Code 查找
_flatCache = Roots.SelectMany(GetSelfAndChildren).ToDictionary(x => x.Code);
}
///
/// 递归获取所有节点(平铺)
///
private static IEnumerable GetSelfAndChildren(IndustryNode node)
{
yield return node;
if (node.Children == null) yield break;
foreach (var child in node.Children.SelectMany(GetSelfAndChildren))
yield return child;
}
///
/// 快速查找节点 (O(1))
///
public static IndustryNode FindByCode(string code) =>
!string.IsNullOrEmpty(code) && _flatCache.TryGetValue(code, out var node) ? node : null;
///
/// 初始化行业分类静态数据
///
public static List BuildInitialData() => new()
{
new() {
Code = "IND_MANU",
NameCn = "工业与制造业领域",
NameEn = "Industry & Manufacturing",
Keywords = "工业,制造,机械,装备,工厂,自动化",
Children = new()
{
new() { Code = "IND_MANU_01", ParentCode = "IND_MANU", NameCn = "工业与制造业领域", NameEn = "Industry & Manufacturing" }
}
},
new() {
Code = "ENERGY_RES",
NameCn = "能源与资源领域",
NameEn = "Energy & Resources",
Keywords = "能源,电力,煤炭,石油,天然气,矿产,新能源",
Children = new()
{
new() { Code = "ENERGY_RES_01", ParentCode = "ENERGY_RES", NameCn = "能源与资源领域", NameEn = "Energy & Resources" }
}
},
new() {
Code = "TRANS_LOG",
NameCn = "交通运输与物流领域",
NameEn = "Transportation & Logistics",
Keywords = "交通,运输,物流,港口,机场,铁路,公路,货运",
Children = new()
{
new() { Code = "TRANS_LOG_01", ParentCode = "TRANS_LOG", NameCn = "交通运输与物流领域", NameEn = "Transportation & Logistics" }
}
},
new() {
Code = "URBAN_RURAL",
NameCn = "城乡建设与规划领域",
NameEn = "Urban & Rural Construction & Planning",
Keywords = "城乡建设,规划,建筑,房地产,市政,工程",
Children = new()
{
new() { Code = "URBAN_RURAL_01", ParentCode = "URBAN_RURAL", NameCn = "城乡建设与规划领域", NameEn = "Urban & Rural Construction & Planning" }
}
},
new() {
Code = "ECO_ENV_WATER",
NameCn = "生态环境与水务领域",
NameEn = "Ecology, Environment & Water Affairs",
Keywords = "环保,生态,水务,水处理,污染治理,碳中和",
Children = new()
{
new() { Code = "ECO_ENV_WATER_01", ParentCode = "ECO_ENV_WATER", NameCn = "生态环境与水务领域", NameEn = "Ecology, Environment & Water Affairs" }
}
},
new() {
Code = "AGRI_FOOD",
NameCn = "农业与食品领域",
NameEn = "Agriculture & Food",
Keywords = "农业,种植,养殖,食品,农产品,粮食,渔业",
Children = new()
{
new() { Code = "AGRI_FOOD_01", ParentCode = "AGRI_FOOD", NameCn = "农业与食品领域", NameEn = "Agriculture & Food" }
}
},
new() {
Code = "FIN_TRADE",
NameCn = "金融与商贸领域",
NameEn = "Finance & Commerce",
Keywords = "金融,银行,保险,证券,商贸,零售,电商",
Children = new()
{
new() { Code = "FIN_TRADE_01", ParentCode = "FIN_TRADE", NameCn = "金融与商贸领域", NameEn = "Finance & Commerce" }
}
},
new() {
Code = "MED_HEALTH",
NameCn = "医药健康与康养领域",
NameEn = "Medicine, Health & Elderly Care",
Keywords = "医疗,医药,健康,康养,医院,器械,生物",
Children = new()
{
new() { Code = "MED_HEALTH_01", ParentCode = "MED_HEALTH", NameCn = "医药健康与康养领域", NameEn = "Medicine, Health & Elderly Care" }
}
},
new() {
Code = "CULT_TOUR_SPORT",
NameCn = "文化旅游与体育领域",
NameEn = "Culture, Tourism & Sports",
Keywords = "文化,旅游,体育,文创,传媒,娱乐,景区",
Children = new()
{
new() { Code = "CULT_TOUR_SPORT_01", ParentCode = "CULT_TOUR_SPORT", NameCn = "文化旅游与体育领域", NameEn = "Culture, Tourism & Sports" }
}
},
new() {
Code = "IT_DIGITAL",
NameCn = "信息科技与数字经济领域",
NameEn = "Information Technology & Digital Economy",
Keywords = "IT,科技,数字经济,软件,互联网,大数据,AI,云计算",
Children = new()
{
new() { Code = "IT_DIGITAL_01", ParentCode = "IT_DIGITAL", NameCn = "信息科技与数字经济领域", NameEn = "Information Technology & Digital Economy" }
}
},
new() {
Code = "EDU_TECH",
NameCn = "教育与科技领域",
NameEn = "Education & Technology",
Keywords = "教育,学校,培训,科研,技术,创新,学术",
Children = new()
{
new() { Code = "EDU_TECH_01", ParentCode = "EDU_TECH", NameCn = "教育与科技领域", NameEn = "Education & Technology" }
}
},
new() {
Code = "SOC_SERVICE",
NameCn = "社会服务与公共管理领域",
NameEn = "Social Services & Public Administration",
Keywords = "社会服务,公共管理,政府,民政,社区,公益",
Children = new()
{
new() { Code = "SOC_SERVICE_01", ParentCode = "SOC_SERVICE", NameCn = "社会服务与公共管理领域", NameEn = "Social Services & Public Administration" }
}
},
new() {
Code = "OTHER_KEY",
NameCn = "其他重点领域(应急,地质勘察,检测,知识产权)",
NameEn = "Other Key Fields",
Keywords = "应急,地质勘察,检测,知识产权,认证,标准",
Children = new()
{
new() { Code = "OTHER_KEY_01", ParentCode = "OTHER_KEY", NameCn = "其他重点领域(应急,地质勘察,检测,知识产权)", NameEn = "Other Key Fields" }
}
}
};
}
#endregion
#region 单位规模信息
///
/// 单位规模
///
public class OrgScale
{
public string Name { get; init; }
public int MinStaff { get; init; }
public int MaxStaff { get; init; }
public static List BuildInitialData() => new()
{
new() { Name = "微型 (1-10人)", MinStaff = 1, MaxStaff = 10 },
new() { Name = "小型 (11-50人)", MinStaff = 11, MaxStaff = 50 },
new() { Name = "中型 (51-200人)", MinStaff = 51, MaxStaff = 200 },
new() { Name = "大型 (201-1000人)", MinStaff = 201, MaxStaff = 1000 },
new() { Name = "超大型 (1000人以上)", MinStaff = 1001, MaxStaff = int.MaxValue }
};
///
/// 根据人数自动匹配规模标签
///
public static string GetLabel(int count) =>
BuildInitialData().FirstOrDefault(s => count >= s.MinStaff && count <= s.MaxStaff)?.Name ?? "未知规模";
}
#endregion
#region AI 行业匹配结果实体
///
/// AI 行业匹配结果实体
///
public class IndustryMatchResult
{
///
/// 原始出访单位名称
///
public string SourceUnitName { get; set; } = string.Empty;
///
/// 匹配到的目标单位名称(必须与输入 NameCn 一致)
///
public string TargetUnitName { get; set; } = string.Empty;
///
/// 目标单位所属国家
///
public string TargetCountry { get; set; } = string.Empty;
///
/// 识别出的行业分类(来自动态传入的行业标准)
///
public string MatchedIndustry { get; set; } = string.Empty;
///
/// 匹配置信度 (0.0 - 1.0)
///
public double ConfidenceScore { get; set; }
///
/// AI 给出的匹配理由说明
///
public string MatchReason { get; set; } = string.Empty;
// --- 辅助属性 (非 AI 返回内容) ---
///
/// 判断是否为高价值匹配(业务逻辑判定)
///
[JsonIgnore]
public bool IsHighValue => ConfidenceScore >= 0.8;
}
#endregion
}