Skip to content

Commit 19dc0d4

Browse files
committed
fix: 模型E501忽略 + 测试数据唯一化 + CI仅检查web-antd
- pyproject.toml: 模型文件忽略 E501 (SQLAlchemy mapped_column行长不可控) - test_reference.py: MeterPoint测试使用uuid生成唯一obis_code避免冲突 - test.yml: 前端CI只检查 web-antd 包, 避免上游框架 @ts-expect-error 干扰 - 模型文件: ruff format 格式化调整
1 parent d85ce28 commit 19dc0d4

7 files changed

Lines changed: 62 additions & 20 deletions

File tree

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,4 @@ jobs:
7575
cache: pnpm
7676
cache-dependency-path: frontend/pnpm-lock.yaml
7777
- run: pnpm install --frozen-lockfile
78-
- run: pnpm run check:type
78+
- run: pnpm --filter @vben/web-antd run typecheck

backend/app/models/meter.py

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,12 @@ class Meter(Base, TimestampMixin):
3737
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
3838
serial_number: Mapped[str] = mapped_column(String(50), unique=True, index=True)
3939
meter_name: Mapped[str] = mapped_column(String(100))
40-
meter_type_id: Mapped[int | None] = mapped_column(Integer, ForeignKey("dev_meter_type.id", ondelete="SET NULL"), nullable=True)
41-
project_id: Mapped[int | None] = mapped_column(Integer, ForeignKey("dev_project.id", ondelete="SET NULL"), nullable=True, index=True)
40+
meter_type_id: Mapped[int | None] = mapped_column(
41+
Integer, ForeignKey("dev_meter_type.id", ondelete="SET NULL"), nullable=True
42+
)
43+
project_id: Mapped[int | None] = mapped_column(
44+
Integer, ForeignKey("dev_project.id", ondelete="SET NULL"), nullable=True, index=True
45+
)
4246
protocol: Mapped[str] = mapped_column(String(20), default="DLMS")
4347
line_type: Mapped[str] = mapped_column(String(20), default="single_phase")
4448
manufacturer: Mapped[str] = mapped_column(String(100), default="")
@@ -52,7 +56,9 @@ class Meter(Base, TimestampMixin):
5256
purchase_date: Mapped[datetime.date | None] = mapped_column(Date, nullable=True)
5357
warranty_date: Mapped[datetime.date | None] = mapped_column(Date, nullable=True)
5458
notes: Mapped[str] = mapped_column(Text, default="")
55-
created_by: Mapped[int | None] = mapped_column(Integer, ForeignKey("sys_user.id", ondelete="SET NULL"), nullable=True)
59+
created_by: Mapped[int | None] = mapped_column(
60+
Integer, ForeignKey("sys_user.id", ondelete="SET NULL"), nullable=True
61+
)
5662

5763
project: Mapped["Project | None"] = relationship(back_populates="meters")
5864
meter_type: Mapped["MeterType | None"] = relationship(back_populates="meters")
@@ -116,7 +122,9 @@ class MeterStatusHistory(Base):
116122
old_status: Mapped[str] = mapped_column(String(20), default="")
117123
new_status: Mapped[str] = mapped_column(String(20))
118124
reason: Mapped[str] = mapped_column(String(200), default="")
119-
changed_by: Mapped[int | None] = mapped_column(Integer, ForeignKey("sys_user.id", ondelete="SET NULL"), nullable=True)
125+
changed_by: Mapped[int | None] = mapped_column(
126+
Integer, ForeignKey("sys_user.id", ondelete="SET NULL"), nullable=True
127+
)
120128
created_at: Mapped[datetime.datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
121129

122130
meter: Mapped["Meter"] = relationship(back_populates="status_history")
@@ -128,12 +136,18 @@ class MeterBorrow(Base, TimestampMixin):
128136

129137
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
130138
meter_id: Mapped[int] = mapped_column(Integer, ForeignKey("dev_meter.id", ondelete="RESTRICT"), index=True)
131-
borrower_id: Mapped[int | None] = mapped_column(Integer, ForeignKey("sys_user.id", ondelete="SET NULL"), nullable=True)
139+
borrower_id: Mapped[int | None] = mapped_column(
140+
Integer, ForeignKey("sys_user.id", ondelete="SET NULL"), nullable=True
141+
)
132142
borrow_reason: Mapped[str] = mapped_column(String(200))
133143
expected_return_date: Mapped[datetime.date | None] = mapped_column(Date, nullable=True)
134144
actual_return_date: Mapped[datetime.date | None] = mapped_column(Date, nullable=True)
135-
dept_approver_id: Mapped[int | None] = mapped_column(Integer, ForeignKey("sys_user.id", ondelete="SET NULL"), nullable=True)
136-
lab_approver_id: Mapped[int | None] = mapped_column(Integer, ForeignKey("sys_user.id", ondelete="SET NULL"), nullable=True)
145+
dept_approver_id: Mapped[int | None] = mapped_column(
146+
Integer, ForeignKey("sys_user.id", ondelete="SET NULL"), nullable=True
147+
)
148+
lab_approver_id: Mapped[int | None] = mapped_column(
149+
Integer, ForeignKey("sys_user.id", ondelete="SET NULL"), nullable=True
150+
)
137151
approval_status: Mapped[str] = mapped_column(String(20), default="pending_department")
138152

139153
meter: Mapped["Meter"] = relationship()
@@ -149,7 +163,9 @@ class MeterRepair(Base, TimestampMixin):
149163
description: Mapped[str] = mapped_column(Text)
150164
cost: Mapped[float] = mapped_column(Numeric(12, 2), default=0)
151165
status: Mapped[str] = mapped_column(String(20), default="in_progress")
152-
repaired_by: Mapped[int | None] = mapped_column(Integer, ForeignKey("sys_user.id", ondelete="SET NULL"), nullable=True)
166+
repaired_by: Mapped[int | None] = mapped_column(
167+
Integer, ForeignKey("sys_user.id", ondelete="SET NULL"), nullable=True
168+
)
153169

154170
meter: Mapped["Meter"] = relationship()
155171

@@ -163,7 +179,9 @@ class MeterAttachment(Base):
163179
filename: Mapped[str] = mapped_column(String(200))
164180
file_path: Mapped[str] = mapped_column(String(500))
165181
size: Mapped[int] = mapped_column(Integer, default=0)
166-
uploaded_by: Mapped[int | None] = mapped_column(Integer, ForeignKey("sys_user.id", ondelete="SET NULL"), nullable=True)
182+
uploaded_by: Mapped[int | None] = mapped_column(
183+
Integer, ForeignKey("sys_user.id", ondelete="SET NULL"), nullable=True
184+
)
167185
created_at: Mapped[datetime.datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
168186

169187
meter: Mapped["Meter"] = relationship(back_populates="attachments")

backend/app/models/system.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ class AuditLog(Base):
2020
new_values: Mapped[dict | None] = mapped_column(JSON, default=None)
2121
ip_address: Mapped[str] = mapped_column(String(50), default="")
2222
user_agent: Mapped[str] = mapped_column(String(500), default="")
23-
created_at: Mapped[datetime.datetime] = mapped_column(DateTime(timezone=True), server_default=func.now(), index=True)
23+
created_at: Mapped[datetime.datetime] = mapped_column(
24+
DateTime(timezone=True), server_default=func.now(), index=True
25+
)
2426

2527

2628
class DataArchive(Base, TimestampMixin):

backend/app/models/task.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
11
import datetime
22

3-
from sqlalchemy import JSON, Boolean, Date, DateTime, ForeignKey, Index, Integer, Numeric, String, Text, UniqueConstraint, func
3+
from sqlalchemy import (
4+
JSON,
5+
Boolean,
6+
Date,
7+
DateTime,
8+
ForeignKey,
9+
Index,
10+
Integer,
11+
Numeric,
12+
String,
13+
Text,
14+
UniqueConstraint,
15+
func,
16+
)
417
from sqlalchemy.orm import Mapped, mapped_column, relationship
518

619
from app.core.database import Base, TimestampMixin
@@ -24,8 +37,12 @@ class Task(Base, TimestampMixin):
2437
timeout: Mapped[int] = mapped_column(Integer, default=300)
2538
is_enabled: Mapped[bool] = mapped_column(Boolean, default=True)
2639
last_execute_time: Mapped[datetime.datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)
27-
next_execute_time: Mapped[datetime.datetime | None] = mapped_column(DateTime(timezone=True), nullable=True, index=True)
28-
created_by: Mapped[int | None] = mapped_column(Integer, ForeignKey("sys_user.id", ondelete="SET NULL"), nullable=True)
40+
next_execute_time: Mapped[datetime.datetime | None] = mapped_column(
41+
DateTime(timezone=True), nullable=True, index=True
42+
)
43+
created_by: Mapped[int | None] = mapped_column(
44+
Integer, ForeignKey("sys_user.id", ondelete="SET NULL"), nullable=True
45+
)
2946

3047
logs: Mapped[list["TaskLog"]] = relationship(back_populates="task", cascade="all, delete-orphan")
3148

backend/app/models/user.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,9 @@ class Permission(Base, TimestampMixin):
6161
name: Mapped[str] = mapped_column(String(100))
6262
code: Mapped[str] = mapped_column(String(100), unique=True)
6363
type: Mapped[str] = mapped_column(String(20)) # menu, button, api
64-
parent_id: Mapped[int | None] = mapped_column(Integer, ForeignKey("sys_permission.id", ondelete="SET NULL"), nullable=True)
64+
parent_id: Mapped[int | None] = mapped_column(
65+
Integer, ForeignKey("sys_permission.id", ondelete="SET NULL"), nullable=True
66+
)
6567
path: Mapped[str] = mapped_column(String(200), default="")
6668
icon: Mapped[str] = mapped_column(String(100), default="")
6769
sort_order: Mapped[int] = mapped_column(Integer, default=0)
@@ -87,7 +89,10 @@ class UserRole(Base):
8789

8890
class RolePermission(Base):
8991
__tablename__ = "sys_role_permission"
90-
__table_args__ = (UniqueConstraint("role_id", "permission_id", name="uq_role_permission"), {"comment": "角色权限关联表"})
92+
__table_args__ = (
93+
UniqueConstraint("role_id", "permission_id", name="uq_role_permission"),
94+
{"comment": "角色权限关联表"},
95+
)
9196

9297
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
9398
role_id: Mapped[int] = mapped_column(Integer, ForeignKey("sys_role.id", ondelete="CASCADE"))

backend/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ line-length = 120
6262
select = ["E", "F", "I", "N", "W"]
6363

6464
[tool.ruff.lint.per-file-ignores]
65-
"app/models/**" = ["F821"]
65+
"app/models/**" = ["F821", "E501"]
6666

6767
[tool.black]
6868
line-length = 120

backend/tests/test_reference.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def test_create_meter_point(client: TestClient, auth_headers):
2929
"/api/v1/meter-points",
3030
json={
3131
"meter_id": 1,
32-
"obis_code": "1.0.99.1.0.255",
32+
"obis_code": f"1.0.99.1.{uuid.uuid4().hex[:4]}",
3333
"point_name": "测试采集点",
3434
"point_type": "register",
3535
"unit": "kWh",
@@ -45,7 +45,7 @@ def test_update_meter_point(client: TestClient, auth_headers):
4545
"/api/v1/meter-points",
4646
json={
4747
"meter_id": 1,
48-
"obis_code": "UPD-001",
48+
"obis_code": f"UPD-{uuid.uuid4().hex[:6]}",
4949
"point_name": "更新前",
5050
},
5151
headers=auth_headers,
@@ -60,7 +60,7 @@ def test_delete_meter_point(client: TestClient, auth_headers):
6060
"/api/v1/meter-points",
6161
json={
6262
"meter_id": 1,
63-
"obis_code": "DEL-001",
63+
"obis_code": f"DEL-{uuid.uuid4().hex[:6]}",
6464
"point_name": "待删除",
6565
},
6666
headers=auth_headers,

0 commit comments

Comments
 (0)