guzhi/app/models/valuation.py
邹方成 01ed8fb25b feat: 添加短信验证码绕过功能并更新API权限同步
- 添加SMS_BYPASS_CODE配置允许特定验证码绕过验证
- 实现角色与API权限的自动同步功能
- 更新评估模型的时间字段为可空
- 移除前端PC路由配置
- 更新Docker镜像版本至v2.6
- 切换开发环境API基础地址
2025-12-02 16:41:03 +08:00

129 lines
9.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from tortoise import fields
from tortoise.models import Model
class ValuationAssessment(Model):
"""估值评估模型"""
id = fields.IntField(pk=True, description="主键ID")
# 基础信息
asset_name = fields.CharField(max_length=200, description="资产名称")
institution = fields.CharField(max_length=200, description="所属机构")
industry = fields.CharField(max_length=100, description="所属行业")
# 财务状况
annual_revenue = fields.CharField(max_length=50, null=True, description="近12个月机构营收/万元")
rd_investment = fields.CharField(max_length=50, null=True, description="近12个月机构研发投入/万元")
three_year_income = fields.JSONField(null=True, description="近三年机构收益/万元")
funding_status = fields.CharField(max_length=500, null=True, description="资产受资助情况")
# 非遗等级与技术
inheritor_level = fields.CharField(max_length=50, null=True, description="非遗传承人等级")
inheritor_ages = fields.JSONField(null=True, description="传承人年龄列表")
inheritor_age_count = fields.JSONField(null=True, description="非遗传承人年龄水平及数量")
inheritor_certificates = fields.JSONField(null=True, description="非遗传承人等级证书")
heritage_level = fields.CharField(max_length=50, null=True, description="非遗等级")
heritage_asset_level = fields.CharField(max_length=50, null=True, description="非遗资产等级")
patent_application_no = fields.CharField(max_length=100, null=True, description="非遗资产所用专利的申请号")
patent_remaining_years = fields.CharField(max_length=50, null=True, description="专利剩余年限")
historical_evidence = fields.JSONField(null=True, description="非遗资产历史证明证据及数量")
patent_certificates = fields.JSONField(null=True, description="非遗资产所用专利的证书")
pattern_images = fields.JSONField(null=True, description="非遗纹样图片")
report_url = fields.CharField(max_length=512, null=True, description="管理员上传的评估报告URL")
certificate_url = fields.CharField(max_length=512, null=True, description="管理员上传的证书URL")
# 非遗应用与推广
implementation_stage = fields.CharField(max_length=100, null=True, description="非遗资产应用成熟度")
application_maturity = fields.CharField(max_length=100, null=True, description="非遗资产应用成熟度")
application_coverage = fields.CharField(max_length=100, null=True, description="非遗资产应用覆盖范围")
coverage_area = fields.CharField(max_length=100, null=True, description="应用覆盖范围")
cooperation_depth = fields.CharField(max_length=100, null=True, description="非遗资产跨界合作深度")
collaboration_type = fields.CharField(max_length=100, null=True, description="跨界合作类型")
offline_activities = fields.CharField(max_length=50, null=True, description="近12个月线下相关宣讲活动次数")
offline_teaching_count = fields.IntField(null=True, description="近12个月线下相关演讲活动次数")
online_accounts = fields.JSONField(null=True, description="线上相关宣传账号信息")
platform_accounts = fields.JSONField(null=True, description="线上相关宣传账号信息")
# 非遗资产衍生商品信息
sales_volume = fields.CharField(max_length=50, null=True, description="该商品近12个月销售量")
link_views = fields.CharField(max_length=50, null=True, description="该商品近12个月的链接浏览量")
circulation = fields.CharField(max_length=50, null=True, description="该商品的发行量")
scarcity_level = fields.CharField(max_length=50, null=True, description="稀缺等级")
last_market_activity = fields.CharField(max_length=100, null=True, description="该商品最近一次市场活动时间")
market_activity_time = fields.CharField(max_length=100, null=True, description="市场活动的时间")
monthly_transaction = fields.CharField(max_length=50, null=True, description="月交易额")
monthly_transaction_amount = fields.CharField(max_length=50, null=True, description="月交易额")
price_fluctuation = fields.JSONField(null=True, description="该商品近30天价格波动区间")
price_range = fields.JSONField(null=True, description="资产商品的价格波动率")
market_price = fields.FloatField(null=True, description="市场价格(单位:万元)")
credit_code_or_id = fields.CharField(max_length=64, null=True, description="统一社会信用代码或身份证号")
biz_intro = fields.TextField(null=True, description="业务/传承介绍")
# 内置API计算字段
infringement_record = fields.CharField(max_length=100, null=True, description="侵权记录")
patent_count = fields.CharField(max_length=50, null=True, description="专利使用量")
esg_value = fields.CharField(max_length=50, null=True, description="ESG关联价值")
policy_matching = fields.CharField(max_length=50, null=True, description="政策匹配度")
online_course_views = fields.IntField(null=True, description="线上课程点击量")
pattern_complexity = fields.CharField(max_length=50, null=True, description="结构复杂度")
normalized_entropy = fields.CharField(max_length=50, null=True, description="归一化信息熵")
legal_risk = fields.CharField(max_length=100, null=True, description="法律风险-侵权诉讼历史")
base_pledge_rate = fields.CharField(max_length=50, null=True, description="基础质押率")
flow_correction = fields.CharField(max_length=50, null=True, description="流量修正系数")
# 计算结果字段
model_value_b = fields.FloatField(null=True, description="模型估值B万元")
market_value_c = fields.FloatField(null=True, description="市场估值C万元")
final_value_ab = fields.FloatField(null=True, description="最终估值AB万元")
dynamic_pledge_rate = fields.FloatField(null=True, description="动态质押率")
calculation_result = fields.JSONField(null=True, description="完整计算结果JSON")
calculation_input = fields.JSONField(null=True, description="计算输入参数JSON")
# 系统字段
user = fields.ForeignKeyField("models.AppUser", related_name="valuations", description="提交用户")
status = fields.CharField(max_length=20, default="pending", description="评估状态: pending(待审核), success(已通过), rejected(已拒绝)")
admin_notes = fields.TextField(null=True, description="管理员备注")
created_at = fields.DatetimeField(auto_now_add=True, description="创建时间")
updated_at = fields.DatetimeField(null=True, description="更新时间")
audited_at = fields.DatetimeField(null=True, description="审核时间")
is_active = fields.BooleanField(default=True, description="是否激活")
class Meta:
table = "valuation_assessments"
table_description = "估值评估表"
def __str__(self):
return f"估值评估-{self.asset_name}"
class ValuationCalculationStep(Model):
"""估值计算步骤模型"""
id = fields.IntField(pk=True, description="主键ID")
valuation = fields.ForeignKeyField("models.ValuationAssessment", related_name="calculation_steps", description="关联的估值评估")
formula_code = fields.CharField(max_length=64, null=True, description="公式编码")
formula_name = fields.CharField(max_length=255, null=True, description="公式名称")
formula_text = fields.TextField(null=True, description="公式说明")
parent_formula_code = fields.CharField(max_length=64, null=True, description="父级公式编码")
group_code = fields.CharField(max_length=64, null=True, description="分组编码")
step_order = fields.DecimalField(max_digits=8, decimal_places=3, description="步骤顺序")
step_name = fields.CharField(max_length=255, description="步骤名称")
step_description = fields.TextField(null=True, description="步骤描述")
input_params = fields.JSONField(null=True, description="输入参数")
output_result = fields.JSONField(null=True, description="输出结果")
status = fields.CharField(max_length=20, default="processing", description="步骤状态: processing, completed, failed")
error_message = fields.TextField(null=True, description="错误信息")
created_at = fields.DatetimeField(auto_now_add=True, description="创建时间")
updated_at = fields.DatetimeField(null=True, description="更新时间")
class Meta:
table = "valuation_calculation_steps"
table_description = "估值计算步骤表"
ordering = ["step_order"]
# 唯一索引同一估值ID下同一公式编码只能有一条记录
# 注意formula_code 允许为 NULL但新逻辑中 formula_code 总是有值
unique_together = [("valuation", "formula_code")]
def __str__(self):
return f"估值ID {self.valuation_id} - 步骤 {self.step_order}: {self.step_name}"