Files
test/app/model/__pycache__/employment.cpython-311.pyc
T

49 lines
6.2 KiB
Plaintext
Raw Normal View History

2026-09-21 19:03:31 +08:00
§
O‡ªjSãó’—dZddlmZddlmZddlmZddlmZm Z m
Z
m Z m Z ddl
mZmZmZddlmZmZmZGd„d eee¦«Zd
S) u 就业信�表(需求 2.3)。
关于「学生姓��学生�级属于冗余字段�的处�
--------------------------------------------------------------------------
需求点��自行设计表结构�平衡查询效率与一致性。这里的��:
* **学生姓���库。** 它是 student.name 的投影,1:1 关系,
JOIN 一次的�本�以忽略;而一旦�库,改�就会两处�一致,收益为零。查询接�
统一 `JOIN student` ��字。
* **�级�库(class_id 而� class_name)。** 因为"按�级筛就业�按�级算就业率/
平�就业时长"是高频统计场景,�次 JOIN student � JOIN clazz �本更高;
而且存 id �存�字,�级改��会导致�数�。
代价是学生转�时��步——由 ``EmploymentService.sync_class_id()`` 在学生
接�里兜�,�给"记得改"留��。
* **就业时长��库**,= offer_date - open_date,用 SQL DATEDIFF 或 Python 现算。
状��动(需求 2.3 �选扩展,这里是必�):
登记就业 -> 有 open_date 则学生 status=2(进入就业),
-> 有 offer_date 则学生 status=3(已就业)
删除就业记录 -> 学生状�回退(3 -> 2 -> 1),��许跨级跳。
é)Ú annotations)Údate)ÚDecimal)ÚDateÚ
ForeignKeyÚNumericÚStringÚText)ÚMappedÚ
mapped_columnÚ relationship)ÚBaseÚSoftDeleteMixinÚTimestampMixincóð—eZdZUdZddiZedd¬¦«Zded<eed¦«dd dd
¬ ¦«Z ded <eed
¦«dd¬¦«Z
ded<ee d¬¦«Z ded<ee d¬¦«Z
ded<eed¦«dd¬¦«Zded<eedd¦«dd¬¦«Zded <eed!¦«d"¬¦«Zded#<eed$¦«d%¬¦«Zded&<eed'¬¦«Zded(<edd)¬*¦«Zd+ed,<ed)e
g¬-¦«Zd.ed/<ed<d2„¦«Zed<d3„¦«Zed=d5„¦«Zed<d6„¦«Zed<d7„¦«Zed=d8„¦«Zed>d:„¦«Z d;S)?Ú
EmploymentÚ
employmentÚcommentu学生就业信æ�¯è¡¨T)Ú primary_keyÚ
autoincrementz Mapped[int]Úidz
student.idFu)学生ID(一学生一æ�¡å°±ä¸šè®°å½•))ÚuniqueÚnullableÚindexrÚstu_idzclazz.iduGç�­çº§ID(冗余,用于按ç�­ç»Ÿè®¡ï¼Œè½¬ç�­æ—¶ç”± service å�Œæ­¥ï¼‰)rrzMapped[int | None]Úclass_idu就业开放时间)rzMapped[date | None]Ú open_dateuoffer 下å�‘æ—¶é—´Ú
offer_dateéPu就业公å�¸å��ç§°zMapped[str | None]Úcompanyé
éu就业薪资(元/月)zMapped[Decimal | None]Úsalaryé2u å²—ä½�å��ç§°Úpositionéu 就业城市Úcityu备注ÚremarkÚjoined)Úback_populatesÚlazyzMapped['Student']Ústudent)r+Ú foreign_keyszMapped['Clazz']ÚklassÚreturnú
str | Nonecó,—|jr |jjndS©N)r,Úname©Úselfs ú,D:\xwt0803\wolin_sms\app\model\employment.pyÚ student_namezEmployment.student_name<s€à$(¤LÐ:ˆtŒ|Ô Ð °dÐ:ócó,—|jr |jjndSr2)r,Ústu_nor4s r6r:zEmployment.stu_no@ó€à&*¤lÐ<ˆtŒ|Ô"Ð"¸Ð<r8ú
int | Nonecó,—|jr |jjndSr2)r,Ústatusr4s r6Ústudent_statuszEmployment.student_statusDr;r8có,—|jr |jjndSr2)r,Ú status_textr4s r6Ústudent_status_textzEmployment.student_status_textHs€à+/¬<ÐAˆtŒ|Ô'Ð'¸TÐAr8cóL—|jr|jjdkr |jjndS)Nr)r.Úis_delr3r4s r6Ú
class_namezEmployment.class_nameLs(€ð#'¤*ÐQ°´Ô1BÀaÒ1GÐ1GˆtŒzŒˆÈTÐQr8cóJ—|jr|jr|j|jz
jSdS)uB就业时长 = offer 下å�‘æ—¶é—´ - 就业开放时间(天)。N)rrÚdaysr4s r6Ú
duration_dayszEmployment.duration_daysQs.€ð Œ>ð ;˜dœoð ;Ø”O d¤nÑ4Ô:Ð :؈tr8ú float | Nonecó^—|j�%tt|j¦«dz d¦«ndS)Ni'r")r#ÚroundÚfloatr4s r6Ú
salary_wanzEmployment.salary_wanXs.€à7;´{Ð7N�u•U˜4œ;Ñ'Ô'¨%Ñ/°Ñ3Ô3Ð3ÐTXÐXr8N)r/r0)r/r<)r/rI)!Ú__name__Ú
__module__Ú __qualname__Ú
__tablename__Ú__table_args__r rÚ__annotations__rrrrrrr r rr#r%r'r
r(r
r,r.Úpropertyr7r:r?rBrErHrM©r8r6rr"s€€€€€€Ø €MØÐ!8Ð9€Nà#�m°ÀDÐIÑIÔI€BÐIÐIÐIÑIØ'˜-؈