feat: 同步本地未提交的前后端更新(plan/quality/material/inspection/production 等模块)

This commit is contained in:
2026-06-20 18:19:06 +08:00
parent 970afe10b4
commit db3945c263
19 changed files with 1681 additions and 961 deletions

View File

@@ -1,14 +1,9 @@
from sqlalchemy import Column, Integer, String, Float, DateTime, Enum, Text, func
from sqlalchemy import Column, Integer, String, Float, DateTime, Text, func
from app.database import Base
import enum
class PlanStatus(str, enum.Enum):
DRAFT = "draft" # 草稿
CONFIRMED = "confirmed" # 已确认
IN_PROGRESS = "in_progress" # 执行中
COMPLETED = "completed" # 完成
CANCELLED = "cancelled" # 取消
# 计划状态:准备好/在线/生产中/产出
PLAN_STATUS = ("ready", "online", "producing", "produced")
class ProductionPlan(Base):
@@ -17,16 +12,34 @@ class ProductionPlan(Base):
id = Column(Integer, primary_key=True, index=True)
plan_no = Column(String(30), unique=True, nullable=False, index=True, comment="计划号")
plan_date = Column(DateTime, nullable=False, comment="计划日期")
plan_date = Column(DateTime, nullable=False, comment="计划时间")
status = Column(String(20), default="ready", comment="状态: ready/online/producing/produced")
# 新结构:卷号 / 钢种 / 厚宽 / 偏差 / 工艺
cold_coil_no = Column(String(30), index=True, comment="冷卷号")
hot_coil_no = Column(String(30), index=True, comment="热卷号")
steel_grade = Column(String(30), comment="钢种")
incoming_thickness = Column(Float, comment="来料厚度 mm")
product_thickness = Column(Float, comment="产品厚度 mm")
deviation_upper = Column(Float, comment="偏差上限 mm")
deviation_lower = Column(Float, comment="偏差下限 mm")
incoming_width = Column(Float, comment="来料宽度 mm")
product_width = Column(Float, comment="产品宽度 mm")
packaging_req = Column(String(30), comment="包装要求")
trim_req = Column(String(30), comment="切边要求")
rolling_mode = Column(String(30), comment="轧制模式")
coil_diameter = Column(Float, comment="卷径 mm")
split_count = Column(Integer, default=1, comment="分卷数")
next_process = Column(String(30), comment="下工序")
# 兼容历史字段
shift = Column(String(10), comment="班次")
plan_quantity = Column(Integer, default=0, comment="计划数量(卷)")
plan_weight = Column(Float, default=0, comment="计划重量kg")
actual_quantity = Column(Integer, default=0, comment="实际数量(卷)")
actual_weight = Column(Float, default=0, comment="实际重量kg")
status = Column(Enum(PlanStatus), default=PlanStatus.DRAFT)
steel_grade = Column(String(30), comment="主要钢种")
spec_range = Column(String(50), comment="规格范围")
priority = Column(Integer, default=5, comment="优先级1-10")
plan_quantity = Column(Integer, default=0)
plan_weight = Column(Float, default=0)
actual_quantity = Column(Integer, default=0)
actual_weight = Column(Float, default=0)
spec_range = Column(String(50))
priority = Column(Integer, default=5)
remark = Column(Text)
created_by = Column(String(50))
created_at = Column(DateTime, server_default=func.now())

View File

@@ -7,21 +7,42 @@ class ProductionRecord(Base):
__tablename__ = "production_records"
id = Column(Integer, primary_key=True, index=True)
coil_no = Column(String(30), nullable=False, index=True)
coil_no = Column(String(30), nullable=False, index=True) # 兼容旧字段,等同于 sub_coil_no
sub_coil_no = Column(String(30), index=True, comment="子卷号")
hot_coil_no = Column(String(30), index=True, comment="热卷号")
plan_id = Column(Integer, ForeignKey("production_plans.id"), nullable=True)
shift = Column(String(10), comment="次: 甲/乙/丙/丁")
shift_date = Column(DateTime, comment="班期")
start_time = Column(DateTime, comment="开始时间")
end_time = Column(DateTime, comment="结束时间")
process_length = Column(Float, comment="处理长度m")
process_weight = Column(Float, comment="处理重量kg")
avg_speed = Column(Float, comment="平均速度m/min")
max_speed = Column(Float, comment="最大速度m/min")
acid_consumption = Column(Float, comment="酸耗量L")
inlet_thickness = Column(Float, comment="入口厚度mm")
outlet_thickness = Column(Float, comment="出口厚度mm")
inlet_width = Column(Float, comment="入口宽度mm")
quality_grade = Column(String(10), comment="质量等级")
shift = Column(String(10), comment="")
team = Column(String(10), comment="")
steel_grade = Column(String(30), comment="钢种")
incoming_thickness = Column(Float, comment="来料厚度 mm")
outlet_thickness = Column(Float, comment="出口厚度 mm")
deviation_upper = Column(Float, comment="偏差上限")
deviation_lower = Column(Float, comment="偏差下限")
incoming_width = Column(Float, comment="来料宽度 mm")
outlet_width = Column(Float, comment="出口宽度 mm")
incoming_weight = Column(Float, comment="来料重量 t")
weighed_weight = Column(Float, comment="称重重量 t")
packaging_req = Column(String(30), comment="包装要求")
trim_req = Column(String(30), comment="切边要求")
surface_quality = Column(String(30), comment="表面质量")
product_quality = Column(Float, comment="成品质量 %")
product_length = Column(Float, comment="成品长度 m")
length_per_ton = Column(Float, comment="吨钢长度 m/t")
offline_time = Column(DateTime, comment="下线时间")
status = Column(String(20), default="UNWEIGH", comment="状态: UNWEIGH/PRODUCT")
# 兼容历史字段
shift_date = Column(DateTime)
start_time = Column(DateTime)
end_time = Column(DateTime)
process_length = Column(Float)
process_weight = Column(Float)
avg_speed = Column(Float)
max_speed = Column(Float)
acid_consumption = Column(Float)
inlet_thickness = Column(Float)
inlet_width = Column(Float)
quality_grade = Column(String(10))
operator = Column(String(50))
remark = Column(Text)
created_at = Column(DateTime, server_default=func.now())

View File

@@ -46,6 +46,20 @@ class QcDefect(Base):
__tablename__ = "qc_defect"
id = Column(Integer, primary_key=True, index=True)
coil_no = Column(String(30), nullable=True, index=True)
seq_no = Column(Integer, nullable=True, comment="序号")
defect_desc = Column(String(200), nullable=True, comment="缺陷描述")
start_position = Column(Float, nullable=True, comment="开始位置")
end_position = Column(Float, nullable=True, comment="结束位置")
length_val = Column(Float, nullable=True, comment="长度")
upper_surface = Column(Boolean, default=False, comment="上板面")
lower_surface = Column(Boolean, default=False, comment="下板面")
side_op = Column(Boolean, default=False, comment="操作侧")
side_middle = Column(Boolean, default=False, comment="中间")
side_drive = Column(Boolean, default=False, comment="驱动侧")
is_main = Column(Boolean, default=False, comment="主缺陷")
image_url = Column(String(255), nullable=True, comment="缺陷图片URL")
# 兼容旧字段
production_line = Column(String(50), nullable=True)
position = Column(String(50), nullable=True)
plate_surface = Column(String(20), nullable=True)
@@ -53,7 +67,7 @@ class QcDefect(Base):
defect_type = Column(String(50), nullable=True, index=True)
defect_rate = Column(Float, nullable=True)
defect_weight = Column(Float, nullable=True)
degree = Column(String(20), nullable=True) # light/normal/serious
degree = Column(String(20), nullable=True) # light/medium/serious
judge_level = Column(String(20), nullable=True)
judge_by = Column(String(50), nullable=True)
judge_time = Column(DateTime, nullable=True)