From b9d1d2987e46471d8910be3b2226133f06ab3ca2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=85=E6=88=BF?= Date: Thu, 15 Jan 2026 15:56:00 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=98=B2=E6=AD=A2=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E6=8A=A5=E5=90=8D=20-=20=E4=B8=AA=E4=BA=BA=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=92=8C=E9=9B=86=E4=BD=93=E9=A1=B9=E7=9B=AE=E9=83=BD=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E9=87=8D=E5=A4=8D=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 个人项目:检测到重复报名时返回错误而非更新 - 集体项目:添加重复报名检查 - 新增 /martial/athlete/registered API 用于查询已报名选手 Closes #3 --- .../buckets/.bloomcycle.bin/xl.meta | Bin 743 -> 743 bytes .../buckets/.usage-cache.bin.bkp/xl.meta | Bin 630 -> 637 bytes .../buckets/.usage-cache.bin/xl.meta | Bin 630 -> 637 bytes .../.minio.sys/buckets/.usage.json/xl.meta | Bin 2360 -> 2360 bytes .../.usage-cache.bin.bkp/xl.meta | Bin 636 -> 627 bytes .../000000-assets/.usage-cache.bin/xl.meta | Bin 636 -> 627 bytes .../assets/.usage-cache.bin.bkp/xl.meta | Bin 575 -> 575 bytes .../buckets/assets/.usage-cache.bin/xl.meta | Bin 575 -> 575 bytes .../controller/MartialAthleteController.java | 23 ++++++++++++++++++ .../MartialRegistrationOrderController.java | 23 ++++++++++++------ 10 files changed, 39 insertions(+), 7 deletions(-) diff --git a/minio_data/.minio.sys/buckets/.bloomcycle.bin/xl.meta b/minio_data/.minio.sys/buckets/.bloomcycle.bin/xl.meta index 89af94bdf0949d0b24214953a001996707534a3f..6f64feb7aa2deb68c6e713fa49ef8e1d21144041 100644 GIT binary patch delta 460 zcmaFP`kZxw2G0%tgeewJkFaF@Vz@ie#8@ExV$rsqsV?7o3g&F?Sgs&6vAmuQqGsYB zQ}rdOC5h=b6^zYI%@b1%Q;m`=lTDH=Ee$LUEt8ClQ;m!)%q`4Pk|rB6s?{$nJC~kx zn&F)EwOcb78<*sj=Hwh@3|8RWa__#O_@c7kwIld*_{t~cAhDwrD>nHd`-B^#QUrWqNS8K+vN0h#88rWVE~W` zS)N>4RFs-m!muPSwW8!~uE6r*lEk8t)Rg+;JgguknHkd-@XVSXyDqshIVaUQKer$! z6)1g&K>)5`vJCG!&zA^p1n=rqJP7U--kZNZBe)m%Bsa#uxl?#}*L4RVxE{Pq|M!Eq z^$0?o*=T5cYW7zv0!7Y(EEiZ!LZs5K4z5u~}!~1U4 cUpRM~2JfZLO$cs^FrRF8F@nEkFfl>@bv0L6Jr6xl6ha2sk`fR89u&yDtH^i#PT@xQ>y|J zi%J}WGpkaICthSYwFJZh(o20qGILWeOLRdDnfS+4eMxFbV){*mR0|U$BMb9XOJkEX z%M|k@(!bOM@iK$%c$-P7BMuhltjzrLU{^uG4rG!=bTN|E~*!D8p4&hA)#3FiLx?t@24M zE(tA2Ni0b{&cn(81eqCgSoju*imeXL&MfdqP0Y#6OFy*KIWajSwRxd_$D-tnNy`$8 zi&IOA*BXFw~4`NeWfOxzp{>~fq8f@c~8_@$09UJ&mv U>da$woFwM+f2J|>yaT4f069m3;Q#;t delta 326 zcmey%@{MJJ2G6x~f~@O{j7~9QnYpQ#CAuJnO#EXyIf79wb4hARV){)5LkmljL_>qr zUTIFwk;kXP-v){c zJUF41?pzJIfwtFf3QAVhr8Er@S_TLu0G{Ul#^ZhPkW^DU%N{N?Y@<@<}W% z2`xxTEJ;1i!^!{znHkd-@E(bTbHn3I{8erTz4Vsb`m^RmR^;?$Djjz!5C z6DF%MDcLR52eBuuH2?$MON_0t9*gpe<(QbbIT+aGxEL02C~zJ9<=DfZkaD1tW0}Mr Rj+@(gs?N`mTqe=x1ppCYg1i6# diff --git a/minio_data/.minio.sys/buckets/.usage-cache.bin/xl.meta b/minio_data/.minio.sys/buckets/.usage-cache.bin/xl.meta index 18367e63fcde547eeb23a8af9acad3afe703022d..e800fd91a93fbf8dc6fdf2d5dfebed2d2c09c7f3 100644 GIT binary patch delta 333 zcmeyy@|R_T2G0%t1dWqAM_4YDe>*tQ#8_b87kg`GSzp06rgx=V&n@hpSRSW-YE?jD zQHf)4W>sqO#ET54mVj75dZ}+nW^U?bi7tpC6aSb_j$l;FT#{Onn0`|s)xyNc$ih6; z(%2-;GQ~W}G|AG)Ak`w-EG5a<(jdulVcEI#q|*%NJc8#hVr*QJSDKS^s4=49rjA6n|1n4FQ?yimVmQF6wlWr@Yb zsU^j04ZuJb!ka9{q+|+`p0KF6>JnpXtjD7KVmT%zZVm=^IZg(_GYta#QpXrCh<6xu T<}o@>67%^#)0lbQ0aIZB6as;p delta 327 zcmey%@{MJJ2G6x~0*@xN9bvgSmpy5siLt=nH*y7QGu&i48Va_uOD@jMCQpt9%lR zOF|1$5=&B#^RO}iL1xCZ1-wTh>{kb8XBK#*Cgx=3r5{@AoS2-E+Po~WxHz?>xMNXr z#)QdgOiFeO^+D`OYYo6a_Yz}ktjD7KVmT%zZVm=^IWC3;912`Ve>wIrD5Mw@C@_~f_ diff --git a/minio_data/.minio.sys/buckets/.usage.json/xl.meta b/minio_data/.minio.sys/buckets/.usage.json/xl.meta index 87a1a5c19fe24b3fbe25f97c7c3edaadf24dcf60..2258b4b47d3b06333415ab6bc390851c48a19e8d 100644 GIT binary patch delta 164 zcmdlXv_oiu2G0%tglVQ1kFfl1(~FyEVl0qr-@(E1*357H8Em2Vq!Eip?1z^V#@%|V34jR z0fD4$b!=?K2dtODKb+r>?%@NRE{0Cbx3M!}F7vBH1a#VUI>T78z#NmT0UZxAHaapi SE;2JPIX5vhH8r!?0bmF45JTnw diff --git a/minio_data/.minio.sys/buckets/000000-assets/.usage-cache.bin.bkp/xl.meta b/minio_data/.minio.sys/buckets/000000-assets/.usage-cache.bin.bkp/xl.meta index 13e7b8426be01ec2a17c18f411ae18bf85ed20be..c7cbbacf94be5675bf9f5da186ab34b9854325e8 100644 GIT binary patch delta 311 zcmeyv@|k6V2G0%t`1?CQ9%1pZ)_*n8#8{yEcfI-!7MGiA^!FUydWHAb#PT@x1FHfO zi%J}WGpkaICthSYumr>c(o20qGILWeOLRdDnfS*>!5}%sJjKK!DK*u?GQ~30&@$27 z*gVbH!YDDxJjp0IX>tUko@L$~=1j)MC3&SeIY%CJ?mX^uag~L+LjLXr^98i=b7n99nqgmdzKMm1@*RX&NuC7}f=i6yDWc~}{MATwhQ z3!j3a;3OuI_>M)%856hYmlovYC#Ebau3}h}U(B$mte9bON-mHnt}31l*O%_YXxSP!5&IVL7<4hD9)!yF6^91307~9QnYpQ#CAuJnO#EY`V40L?WME=qZf=rnX=G|>Vq~0V znv!B^VUc8FZe(F@GC6`#&oaR~vxBj5NnUAA&XJb_GkjX!%5=D!hY2Od^Zk?4C8@`GSQ&sIGh^BU z-Yku>NlYRcTl7l{a`F>XIu<2oOjuN0b&0Vx)?-nAvD~7vVur;jxj>@0s(3a76B9QF z13O6fqOy$Xav%l+!@}glAbk^o`WS$E7#I$*Gc<4rL?kgpmDKe3*B?vSFhh9`W4&@$ F835C`cO3u# diff --git a/minio_data/.minio.sys/buckets/000000-assets/.usage-cache.bin/xl.meta b/minio_data/.minio.sys/buckets/000000-assets/.usage-cache.bin/xl.meta index ddfe2d1774b48acd123fbbc8f324f8552771a9a8..26f419f55902f023475948e4617065e56028d211 100644 GIT binary patch delta 325 zcmeyv@|k6V2G0%t_+?G0M_9hdTW3u)F&6M;nEJ!ur|-vgQ$v;h_|>FNERRz^uqq(2 zsKhZivnsWC;zfo7OF%3jz0@}(GdK0JL>I)6iGNHdM=+{oEJ-a%OuwmMkep(kVq%e$ znrdO0Vwq}anP_foo@Q)el$d0mWR#q=uK-|&I(}U(AcW~mxW;}E5j1b$@>}Aq}5jWBo>#1 z7NjJWq#oyCWdMTAj5#cP3WkD{m_*_`7A0p)+@fDvkdvR7vZ%OI!n7BC@*yRp$Ff?!|cxmh^ZLvRa;gMN- PamdjVH+YuF9_ax9e~^S_ delta 335 zcmey&@`q)D2G6x~0-cwcjsqO#ET3kmw;G6dZ}+nW^U?bi7tpC6aSd1FG(#)OuwmMnUrW`U}9o!Zjx+i zWNK()WSnN2l45CLkz`_SWMOVH*^p7qabelH^rX`a=eA9h4`ggyl2@9ObL6GK44;;_ zG9B*bVM2-Ve7|JAeu!ZexDm6PZN0zFUY@QE92#5o|FSULWo2;Tn!KM;O`3m|PhxRN zXhBM1N$PPPRt6x*%$T--H%p^z5|c>A7X8wKoczR;jz!5C6BZR$U1DsF^;nc&EVrnv zm|<~BE|4g$DxS^2#Kg_Pzz)*As4Qc;9EicdurT>BNZ&-DJ_ev328KiI3=JFt5lIYD VB{e<%^~X{+%ut@gSg+hw1^`Y3ejES* diff --git a/minio_data/.minio.sys/buckets/assets/.usage-cache.bin.bkp/xl.meta b/minio_data/.minio.sys/buckets/assets/.usage-cache.bin.bkp/xl.meta index 11bca1cb457d843050112ac5f4568eb931fe275a..7597c00bc05456fc93350b4058291721d3a1b18b 100644 GIT binary patch delta 179 zcmdnbvY%yw2G0%tcz20yM_5=M2tAo-Vk~g;;G5ITOMT}qEqHf{kLPO2#PWJJh?W%*>6=QcMg?%}i1ajMEH~EX^&_EX>R-5-lwZEfW`(ol8$T&2X-7pWb4|#wB^B zIXOqxh#%O(XFtoj)%)@oQIVG2r@I~u<&-iI6wI(qZ3QH2J3qO$U;d( delta 179 zcmdnbvY%yw2G6x~0tOaJM_9@W%#|jZ7z@nH33K?k#pOho=T;Wo*IHc@%j?-7Y9{_k z3QbE*wJ=LFu`n_>OG`Dgurx|eHA^&4OHDC1O*1o1G+9`7Enf#N{iDhnT6dM4JhDLY* diff --git a/minio_data/.minio.sys/buckets/assets/.usage-cache.bin/xl.meta b/minio_data/.minio.sys/buckets/assets/.usage-cache.bin/xl.meta index 9aeccfdc497354dc4f633d2236c8023f4b2a8053..48ca106975e3889210c54663bdd7022d2c6a33ff 100644 GIT binary patch delta 176 zcmdnbvY%yw2G0%tc)_&>M_9Z=Lt`eI7z@~Yrbv~pa4g@Y-&kx}Co^ecc|99M&BQ-8 z3Z^M$=Ei0zCI+TvCaDI-X$DD_<`!udW@Z+NmKKJViIXE3^>i;i}OfGdLKUZk@e_}jApat3$mLw>R#KN-so>}?eFBxjM~y_t9%lROF|1$5=&B# b^RO}iL1xAr7T(Sm=O_PUbYdyjV0{k&8%IKq delta 176 zcmdnbvY%yw2G6x~{O_hQ9$`sav(;y!iLpSQAJ?YS$^HxrAMjS_75-Z^vAmuQqGsYB z8-=vgR132-6AL4Av$Rw*3rnNqRI^0$wA2)H(=;>FM3c!8jC#5@M>G`}8<*sj=Hwh% zBO(&29Aj!?*R)Zt@ boQIVG2r@IKE#NsHTr>G6qZ7;A)F?IpDB?u< diff --git a/src/main/java/org/springblade/modules/martial/controller/MartialAthleteController.java b/src/main/java/org/springblade/modules/martial/controller/MartialAthleteController.java index 29da70a..a0944c9 100644 --- a/src/main/java/org/springblade/modules/martial/controller/MartialAthleteController.java +++ b/src/main/java/org/springblade/modules/martial/controller/MartialAthleteController.java @@ -1,5 +1,7 @@ package org.springblade.modules.martial.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import java.util.List; import com.baomidou.mybatisplus.core.metadata.IPage; import com.qiniu.util.Auth; import io.swagger.v3.oas.annotations.Operation; @@ -106,4 +108,25 @@ public class MartialAthleteController extends BladeController { return R.success("状态更新成功"); } + /** + * 获取已报名选手列表(用于检查重复报名) + */ + @GetMapping("/registered") + @Operation(summary = "获取已报名选手", description = "查询指定赛事和项目的已报名选手") + public R> getRegisteredAthletes( + @RequestParam Long competitionId, + @RequestParam(required = false) String projectIds) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(MartialAthlete::getCompetitionId, competitionId) + .eq(MartialAthlete::getIsDeleted, 0) + .eq(MartialAthlete::getRegistrationStatus, 1); + + if (Func.isNotBlank(projectIds)) { + wrapper.in(MartialAthlete::getProjectId, Func.toLongList(projectIds)); + } + + List list = athleteService.list(wrapper); + return R.data(list); + } + } diff --git a/src/main/java/org/springblade/modules/martial/controller/MartialRegistrationOrderController.java b/src/main/java/org/springblade/modules/martial/controller/MartialRegistrationOrderController.java index 6bc1b46..49b5ce2 100644 --- a/src/main/java/org/springblade/modules/martial/controller/MartialRegistrationOrderController.java +++ b/src/main/java/org/springblade/modules/martial/controller/MartialRegistrationOrderController.java @@ -329,6 +329,19 @@ public class MartialRegistrationOrderController extends BladeController { // Create a record for each project for (Long projectId : projectIds) { + // Check if team already registered for this project + LambdaQueryWrapper teamCheckWrapper = new LambdaQueryWrapper<>(); + teamCheckWrapper.eq(MartialAthlete::getCompetitionId, dto.getCompetitionId()) + .eq(MartialAthlete::getProjectId, projectId) + .eq(MartialAthlete::getTeamName, team.getTeamName()) + .eq(MartialAthlete::getIsDeleted, 0); + MartialAthlete existingTeamRecord = athleteService.getOne(teamCheckWrapper, false); + + if (existingTeamRecord != null) { + log.warn("集体重复报名: teamName={}, projectId={}", team.getTeamName(), projectId); + return R.fail("集体 " + team.getTeamName() + " 已报名该项目,请勿重复报名"); + } + MartialAthlete teamAthlete = new MartialAthlete(); teamAthlete.setOrderId(orderId); teamAthlete.setCompetitionId(dto.getCompetitionId()); @@ -368,13 +381,9 @@ public class MartialRegistrationOrderController extends BladeController { MartialAthlete existingRecord = athleteService.getOne(checkWrapper, false); if (existingRecord != null) { - // Update existing record with order info - existingRecord.setOrderId(orderId); - existingRecord.setRegistrationStatus(1); - existingRecord.setUpdateUser(AuthUtil.getUserId()); - existingRecord.setUpdateTime(new java.util.Date()); - athleteService.updateById(existingRecord); - log.info("更新已存在的选手参赛记录: playerName={}, projectId={}", existingAthlete.getPlayerName(), projectId); + // Reject duplicate registration + log.warn("选手重复报名: playerName={}, projectId={}", existingAthlete.getPlayerName(), projectId); + return R.fail("选手 " + existingAthlete.getPlayerName() + " 已报名该项目,请勿重复报名"); } else { // Create new record MartialAthlete newRecord = new MartialAthlete();