From 3ff9e94bdb06ba9827e31d4053c47368df300e1a Mon Sep 17 00:00:00 2001 From: attiya <2413103649@qq.com> Date: Tue, 23 Sep 2025 09:28:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B4=BB=E5=8A=A8-=E7=94=A8=E6=88=B7=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ActivityController.java | 7 +- .../activity/controller/UserController.java | 2 +- .../cdzy/activity/model/dto/ActivityDto.java | 3 +- .../activity/model/vo/RegistrationVo.java | 6 ++ .../cdzy/activity/service/UserService.java | 3 + .../service/impl/UserServiceImpl.java | 67 ++++++++++++++++++ .../controller/ActivityController.class | Bin 6117 -> 6356 bytes .../activity/controller/UserController.class | Bin 7912 -> 7984 bytes .../cdzy/activity/model/dto/ActivityDto.class | Bin 3099 -> 3155 bytes .../service/impl/UserServiceImpl.class | Bin 3920 -> 7796 bytes 10 files changed, 83 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/cdzy/activity/controller/ActivityController.java b/src/main/java/com/cdzy/activity/controller/ActivityController.java index 2d51c8a..3745a9d 100644 --- a/src/main/java/com/cdzy/activity/controller/ActivityController.java +++ b/src/main/java/com/cdzy/activity/controller/ActivityController.java @@ -110,9 +110,10 @@ public class ActivityController { public JsonResult getInfo(@PathVariable Long id) { Activity activity = activityService.getById(id); QueryWrapper queryWrapper = QueryWrapper.create() - .select(ACTIVITY_USER.USER_ID) - .where(ACTIVITY_USER.ACTIVITY_ID.eq(activity.getActivityId())); - List list = activityUserMapper.selectListByQueryAs(queryWrapper,Long.class); + .select(USER.ALL_COLUMNS) + .where(ACTIVITY_USER.ACTIVITY_ID.eq(activity.getActivityId())) + .leftJoin(USER).on(USER.USER_ID.eq(ACTIVITY_USER.USER_ID)); + List list = activityUserMapper.selectListByQueryAs(queryWrapper,User.class); ActivityDto activityDto = new ActivityDto(activity, list); return JsonResult.success(activityDto); } diff --git a/src/main/java/com/cdzy/activity/controller/UserController.java b/src/main/java/com/cdzy/activity/controller/UserController.java index 2297068..957d84d 100644 --- a/src/main/java/com/cdzy/activity/controller/UserController.java +++ b/src/main/java/com/cdzy/activity/controller/UserController.java @@ -132,7 +132,7 @@ public class UserController { */ @PostMapping("activity/registration") public JsonResult registration(@RequestBody RegistrationVo registrationVo) { - + userService.registration(registrationVo); return JsonResult.success(); } } diff --git a/src/main/java/com/cdzy/activity/model/dto/ActivityDto.java b/src/main/java/com/cdzy/activity/model/dto/ActivityDto.java index bf8f864..b95414d 100644 --- a/src/main/java/com/cdzy/activity/model/dto/ActivityDto.java +++ b/src/main/java/com/cdzy/activity/model/dto/ActivityDto.java @@ -1,6 +1,7 @@ package com.cdzy.activity.model.dto; import com.cdzy.activity.model.Activity; +import com.cdzy.activity.model.User; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -23,5 +24,5 @@ public class ActivityDto implements Serializable { private Activity activity; - private List userIds; + private List userIds; } diff --git a/src/main/java/com/cdzy/activity/model/vo/RegistrationVo.java b/src/main/java/com/cdzy/activity/model/vo/RegistrationVo.java index f9586f7..8277a33 100644 --- a/src/main/java/com/cdzy/activity/model/vo/RegistrationVo.java +++ b/src/main/java/com/cdzy/activity/model/vo/RegistrationVo.java @@ -2,11 +2,17 @@ package com.cdzy.activity.model.vo; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; /** * @author attiya * @since 2025-09-22 */ +@Data +@NoArgsConstructor +@AllArgsConstructor public class RegistrationVo { @NotBlank(message = "微信openId不能为空") diff --git a/src/main/java/com/cdzy/activity/service/UserService.java b/src/main/java/com/cdzy/activity/service/UserService.java index 38a142c..28f6c22 100644 --- a/src/main/java/com/cdzy/activity/service/UserService.java +++ b/src/main/java/com/cdzy/activity/service/UserService.java @@ -1,5 +1,6 @@ package com.cdzy.activity.service; +import com.cdzy.activity.model.vo.RegistrationVo; import com.cdzy.activity.model.vo.UserVo; import com.mybatisflex.core.service.IService; import com.cdzy.activity.model.User; @@ -13,4 +14,6 @@ import com.cdzy.activity.model.User; public interface UserService extends IService { void saveUser(UserVo user); + + void registration(RegistrationVo registrationVo); } diff --git a/src/main/java/com/cdzy/activity/service/impl/UserServiceImpl.java b/src/main/java/com/cdzy/activity/service/impl/UserServiceImpl.java index 4c64b9d..f4e6f7f 100644 --- a/src/main/java/com/cdzy/activity/service/impl/UserServiceImpl.java +++ b/src/main/java/com/cdzy/activity/service/impl/UserServiceImpl.java @@ -1,5 +1,12 @@ package com.cdzy.activity.service.impl; +import com.cdzy.activity.mapper.ActivityMapper; +import com.cdzy.activity.mapper.ActivityUserMapper; +import com.cdzy.activity.mapper.UserRegistrationActivityMapper; +import com.cdzy.activity.model.Activity; +import com.cdzy.activity.model.ActivityUser; +import com.cdzy.activity.model.UserRegistrationActivity; +import com.cdzy.activity.model.vo.RegistrationVo; import com.cdzy.activity.model.vo.UserVo; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.spring.service.impl.ServiceImpl; @@ -9,6 +16,12 @@ import com.cdzy.activity.service.UserService; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; + +import static com.cdzy.activity.model.table.ActivityUserTableDef.ACTIVITY_USER; +import static com.cdzy.activity.model.table.UserRegistrationActivityTableDef.USER_REGISTRATION_ACTIVITY; +import static com.cdzy.activity.model.table.UserTableDef.USER; + /** * 服务层实现。 * @@ -21,6 +34,15 @@ public class UserServiceImpl extends ServiceImpl implements Us @Resource private UserMapper userMapper; + @Resource + private ActivityMapper activityMapper; + + @Resource + private ActivityUserMapper activityUserMapper; + + @Resource + private UserRegistrationActivityMapper userRegistrationActivityMapper; + @Override public void saveUser(UserVo user) { QueryWrapper queryWrapper = QueryWrapper @@ -41,4 +63,49 @@ public class UserServiceImpl extends ServiceImpl implements Us entity.setIsFilled(2); userMapper.update(entity); } + + @Override + public void registration(RegistrationVo registrationVo) { + Long activityId = registrationVo.getActivityId(); + String wxOpenId = registrationVo.getWxOpenId(); + Activity activity = activityMapper.selectOneById(activityId); + if (activity == null) { + throw new RuntimeException("该活动不存在"); + } + if (activity.getRegistrationStartTime().isAfter(LocalDateTime.now())){ + throw new RuntimeException("该活动尚未开始报名"); + } + if (activity.getRegistrationEndTime().isBefore(LocalDateTime.now())){ + throw new RuntimeException("该活动已结束报名"); + } + if (activity.getLimitPeople() == 1){ + QueryWrapper queryWrapper = QueryWrapper.create() + .where(USER_REGISTRATION_ACTIVITY.ACTIVITY_ID.eq(activityId)); + long count = userRegistrationActivityMapper.selectCountByQuery(queryWrapper); + if (count >= activity.getMaxNum()){ + throw new RuntimeException("该活动报名人数已达上限"); + } + } + if (activity.getLimitRegister() == 1){ + QueryWrapper queryWrapper = QueryWrapper.create() + .where(ACTIVITY_USER.ACTIVITY_ID.eq(activityId)) + .where(USER.WX_OPEN_ID.eq(wxOpenId)) + .leftJoin(USER).on(USER.USER_ID.eq(ACTIVITY_USER.USER_ID)); + ActivityUser selected = activityUserMapper.selectOneByQuery(queryWrapper); + if (selected == null){ + throw new RuntimeException("该活动限制报名人群,无法报名"); + } + } + QueryWrapper queryWrapper = QueryWrapper.create() + .where(USER.WX_OPEN_ID.eq(wxOpenId)); + User user = userMapper.selectOneByQuery(queryWrapper); + if (user == null){ + throw new RuntimeException("用户信息错误"); + } + UserRegistrationActivity registrationActivity = UserRegistrationActivity.builder() + .activityId(activityId) + .userId(user.getUserId()) + .build(); + userRegistrationActivityMapper.insert(registrationActivity); + } } diff --git a/target/classes/com/cdzy/activity/controller/ActivityController.class b/target/classes/com/cdzy/activity/controller/ActivityController.class index 89ead706c7393dfab2da71abc9f16ddfbdd1d8ae..bb15b5361648052e1a55db3af419c573fd9a664c 100644 GIT binary patch delta 1643 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 H1BrhF-^|Rs delta 2139 zcmbVMd2o|e5dUqiFZuG)CZP?zCb@^&it?X-eDn70?%VzCZ};1#(jz7M zuJ*QV07|I;2HkEm73az2)`4yZ0tjljUSJBU2z{l;ks?>y#@hp!DsTg8q(v)9s70NI z=>jv*laMWEnA2pn=1T~nUc)Sb8!?-Z!|G&Nq@d6%|5wT05=KTj2eP# zXxTXbc>lPHYsXcL9j4j+_`iu$N5(aRmnFEI?qOH|wCOdYg7sB(ff3cU z{Gb6Z2}C&0W@nbACCXn;q7D<*E8`Y{t!#9QJbMGS3%tUYOGUnQCwr>aCCR-eT`m@m z>;}9h@H!d^B9^ACrZN<=W2B1nmcZNmv`wU28a3>Z2ShHtE6LT%yc>I)b6txxx0o56 zQXQ(FSy^9QS4+5D4ox20+@7?C5;Aq_PFWiD5Y&@;$%t=9^3Fsn<>(kexdQ9Z=%zk| z{`?|MuI@U((wER%9`p6KY1EI9$zrC=Ny!-UK2M$vgb(;Mp$z3L|69lH{*TVicdPMg zpIn&Y%iSM~0rbF!EDN@SJwC$6d=frE8sGNGZ7EA>zZ{)9B&@tjIRbe6qFzcmfP?Jq zz$|=<<@h3`2j`nK2v#@j1SL1rv~qL->;8eZ{YnVLpp48ZtB6QLdp-!zCI<;A=Kn ziQ@s^@MpreMokGE{X6~+hbMwU_#Q{tD2O#b@b_Z~Kk;!CKP#|o8O{$)d?w~^!q9?N zOfsRM1=lqh5mn7Gx|K&u?r$Y`{5cz;O}> zImVv9^G7%yqpmG2KYU(hFEas5WUeN`g{zT{YYYVWhCVBfAPXl9PF?6?@MmIAtHGbS z1J#K*s!o#rh=V%b$x&F5bU4Hj2`6!iGbxg`@~Qe*+JXTaF?kcJ3kzE?ErOX5%rO)T zii%ngj^K7y47MWVY zDUFv`ia&9h;V8>rT&QYCDbC<5k4!GQ#zv-?0iMJ;4&2UmHJnk+->gxsahW*`H~{!* ztVJAC{RL`bI>-ozh)0D?WafCP^f{bGwIREs^oO{x6+iONaM88i6WKVm?*Me05?Pq(xWB#c#@n9 zU4+OL?`NlmD1j203sqAwXH+a&TJU7&psNMJ{NHunlw0CJE#xK-JH#-#`SnPpB*>0FnYA0Nz*;OUX35+?JxwS3Ruk1|&-b8cn9Q{a6ef*0kf zZr#Eg?5i-0oi}+mN6@+ggII3!zHG=vEN}DfFytOAzv_L%kds+{)4R)%9c{c}(8QYm z6)AjSs4duC;eBT_-rLSlqw{P~$DQlkiwDU^UD>Yomj~8!$l%3AdeRyAPs0xjrLe(7 tsRnyqmeTlctSz-BD4i4`Zl;8~@jPTxZ_1;5DxgAE>)hocx`-}D>OZ8!!M6Ya diff --git a/target/classes/com/cdzy/activity/model/dto/ActivityDto.class b/target/classes/com/cdzy/activity/model/dto/ActivityDto.class index 6e3032c9beaba2b516a7ecfbc516132473cbebd5..93ed681cd59212bb4f90b0b9430d86d8d31290bc 100644 GIT binary patch delta 190 zcmbO&aam$R5R;&RPgY`CqJC*fW{$p3W^swlWI;wrmeAtVqRB-}e;Gq37ciSl7Gji; z0|{B%S!;$dG8k!S;?{MWIZnt}1E>7vD3+Z}jDnNjvMWwDWjACLnw-wwI@y#%WD0(<^450NnqiC#DjJ%E3}R)8Q&iO;plb6ZmYqzD0+W5%gBS%T&u4FClmxOBC%bW| zPgda&ncT=>$0#)U07u;9dF*VHk8%i2Hsd@DX8-5h0F>FlH3`h~;64K6@$$F<0HnxE AApigX diff --git a/target/classes/com/cdzy/activity/service/impl/UserServiceImpl.class b/target/classes/com/cdzy/activity/service/impl/UserServiceImpl.class index 11184480033a842fc94248400341738f4f770f31..a84859b2dffe015aa8ece17c773d9af6cce01de2 100644 GIT binary patch literal 7796 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 CYgD5E delta 862 zcmYk3X-^YT6o#K^DO1K#rUPYBEEWMvL5;@5m_STiK4AFh7ZanwXp9ks2q-F2aNm&1 zbwdR3Z!VbLj|Q?{Dw&NCc9`*r>vYL zs%SK6lBgleuZy+EWUu;a1zqfK^@Vi~Qm=DJ&GDr=>JgKps?1m5@D`J(s`nKp(yEak zQX}aB)sd*@8ls&rIf+zcu3uMEx~ZySaYcD`wU>~ioiS-sKYZCP&Z%@e-$jR7Xy+KT zGfSsSBTs$PCaZz83B6IfMeFVIH*3iZ7(8cCXUOCQFI7qUpiOJChc^Z@NU?aQF*l@o zQZrR3V~$(rlWNE)@bFn9pqerQYBqmg*pc*To|q lGv6Wo|DX4X2u?qiRQ^l?U-6o^yl0pX;x)wkQRXp9<{t}~ulE1|