Files
test/app/service/__pycache__/employment_service.cpython-313.pyc
T

67 lines
9.1 KiB
Plaintext
Raw Normal View History

2026-09-21 19:03:31 +08:00
ó
°‰ªjèãó¤•SrSSKJr SSKJr SSKJr SSKJrJ r SSK
J r SSK J
r
SSKJr SS KJrJrJr SS
KJr SS KJrJr "S S
5rg)u¬就业业务规则(需求 2.3):一个事务里完æˆ�"写就业表 + 改学生状æ€�"。
为什么必须在一个事务里
--------------------------------------------------------------------------
需求写得很明白:"登记就业信��功时,必须**�时**执行:就业表�入记录 +
学生表状�更新"。这两步是"�么都���么都��"的关系——
中间断电/异常时,如果就业记录写进去了而学生状�没改,�级就业率就会长期�低,
而且是那�没人会�现的错。所以这里统一 flush�由调用方一次 commit,
任何一步抛异常都由 FastAPI 的会��赖整体回滚。
返回值约定(�用字符串拼�示语,改由调用方组装):
register -> (employment, created, status_changed, from_text, to_text)
update -> (employment, status_changed, from_text, to_text)
delete -> (status_changed, from_text, to_text)
é)Ú annotations)ÚSession)Úsettings)Ú
BusinessErrorÚ
NotFoundError)Ú
parse_date)Ú
EmploymentDao)Ú
StudentDao)Ú
EmploymentÚStudentÚ
StudentStatus)ÚSTUDENT_STATUS_TEXT)ÚEmploymentCreateÚEmploymentUpdatecóä•\rSrSr\S
Sj5r\SSj5r\SSj5r\SSj5r \SSj5r
\SSj5r \SSj5r \SS j5r
\SS
j5rS rg )ÚEmploymentServiceécó¤•Ub[[R5$Ub[[R5$[[R5$)uZ学生状æ€�的唯一真æº�:有 offer = 已就业,å�ªæœ‰å¼€æ”¾æ—¶é—´ = 进入就业。)Úintr
ÚEMPLOYEDÚ EMPLOYINGÚSTUDYING©Ú open_dateÚ
offer_dates Ú!app\service\employment_service.pyÚ
derive_statusÚEmploymentService.derive_status!sC€ð Ñ !Ü”}×-Ñ-Ó.Ð .Ø Ñ Ü”}×.Ñ.Ó/Ð /Ü”=×)Ñ)Ó*Ð*ócóJ•Ucg[R"U[U55$©N)rÚgetÚstr)Úcodes rÚ status_textÚEmploymentService.status_text*s!€à ‰<ØÜ"×&Ò& t¬S°«YÓ7Ð7rcóâ•URURUR5nURUR5nURU5nURU:XaSXE4$X1lSXE4$)ug按就业记录推导并写回学生状æ€�,返回 (是å�¦å�˜åŒ–, 原状æ€�文案, 新状æ€�文案)。FT)rrrr%Ústatus)ÚclsÚstudentÚ
employmentÚtargetÚ before_textÚ
after_texts rÚ apply_statusÚEmploymentService.apply_status0si€ð×"Ñ" :×#7Ñ#7¸×9NÑ9NÓOˆØ—o‘o g§n¡nÓ5ˆ Ø—_‘_ VÓ,ˆ
Ø �>‰>˜VÓ #ؘ+Ð1Ð 1ØŒØ�[Ð,Ð,rc ó•[R"XR5nUc[SURS35eURn[
R "XRSS9nUSL=(d URS:HnUc$[URS9nURU5 SU;a[URS 5O URnS
U;a[URS 5O URnURXx5 S UlURUlXul X…l S
Hn X”;dM
[XY[!X)55 M! UR#5 UR%X55up«n UR#5 XVX«U 4$)u-登记就业信æ�¯ï¼ˆå·²å­˜åœ¨åˆ™æ›´æ–°ï¼‰ã€‚Nu学生ä¸�存在(id=õ)T)Ú with_deletedé)Ústu_idrõ就业开放时间rõoffer 下å�‘æ—¶é—´r©ÚcompanyÚsalaryÚpositionÚcityÚremark)r
r"r5rÚmodel_fields_setr Ú
get_by_stu_idÚis_delr ÚaddrrrÚ _check_datesÚclass_idÚsetattrÚgetattrÚflushr/)
r)ÚdbÚpayloadr*Úexplicitr+ÚcreatedrrÚkeyÚchangedÚbeforeÚafters
rÚregisterÚEmploymentService.register<sp€ô
—.’. §^¡^Ó4ˆØ ‰?ÜÐ"7¸¿¹Ð7GÀsÐ KÓLÐ Là×+Ñ+ˆÜ"×0Ò0°·^±^ÐRVÑWˆ
Ø Ð$×>¨
×(9Ñ(9¸QÑ(>ˆØ Ñ Ü#¨7¯>©>Ñ:ˆJØ �F‰F�:Ô ð ˜hÓ&ô
�w×(Ñ(Ð*>Ô ?à×%Ñ%ð ð˜xÓ'ô
�w×)Ñ)Ð+?Ô @à×&Ñ&ð ð
×јÔ/ðˆ
ÔØ%×.Ñ.ˆ
ÔØ(ÔØ *ÔÛFˆCØ�ܘ
¬°Ó)>Ö?ñGð �‰Œ
Ø!$×!1Ñ!1°'Ó!Fш˜Ø
�‰Œ
Ø G°UÐ:Ð:rcó®•URSS9nSU;a[URS5S5O URnSU;a[URS5S5O URnUR XV5 SU;aXRlSU;aXblSHnXt;dM
[
X'XG5 M UR(a?URURR:waURRUlUR5 URcUSSS4$URURU5up‰n
UR5 X(Xš4$) NT)Ú
exclude_unsetrr6rr7r8F) Ú
model_dumprr"rrrBrDr*rCrFr/) r)rGr+rHÚdatarrrKrLrMrNs rÚupdateÚEmploymentService.updatehsB€ð×!Ñ!°Ð!Ð5ˆàOZÐ^bÓOb”J˜tŸx™x¨ Ó4Ð6JÔKÐhr×h|Ñh|ˆ ØQ]ÐaeÓQe”Z §¡¨Ó 6Ð8LÔMÐku÷lAñlAˆ
Ø ×јÔ/ð ˜$Ó Ø#,Ô Ø ˜4Ó Ø$.Ô !ÛFˆCØ�{ܘ
¨©Ö3ñGð
× ×  *×"5Ñ"5¸×9KÑ9K×9TÑ9TÓ"TØ",×"4Ñ"4×"=Ñ"=ˆJÔ à
�‰Œ