From abcf3549df463910481616eb02f3d286ca232653 Mon Sep 17 00:00:00 2001 From: zhouhefeng Date: Mon, 28 Apr 2025 18:08:54 +0800 Subject: [PATCH] commit --- .../controller/ClientActivityController.java | 18 +- .../controller/ClientGroupController.java | 82 +++++ .../controller/ClientProfileController.java | 77 +++++ .../service/ClientActivityService.java | 4 + .../impl/ClientActivityServiceImpl.java | 12 +- .../app/module/activity/models/ActGroup.java | 22 +- .../module/activity/models/ActGroupUser.java | 22 +- .../activity/models/ActItemGroupScore.java | 49 +++ .../activity/models/ActivityItemUser.java | 2 + frontend/src/pages/activity/detail/index.vue | 174 +++++++---- frontend/src/pages/activity/list/index.vue | 5 +- .../activity/registration-form/index.vue | 24 +- frontend/src/pages/profile/act.vue | 291 ++++++++++++++++++ frontend/src/pages/profile/index.vue | 5 +- 14 files changed, 702 insertions(+), 85 deletions(-) create mode 100644 backend/src/main/java/com/budwk/app/client/module/activity/controller/ClientGroupController.java create mode 100644 backend/src/main/java/com/budwk/app/client/module/activity/controller/ClientProfileController.java create mode 100644 backend/src/main/java/com/budwk/app/module/activity/models/ActItemGroupScore.java create mode 100644 frontend/src/pages/profile/act.vue diff --git a/backend/src/main/java/com/budwk/app/client/module/activity/controller/ClientActivityController.java b/backend/src/main/java/com/budwk/app/client/module/activity/controller/ClientActivityController.java index d876dd4..46a63ca 100644 --- a/backend/src/main/java/com/budwk/app/client/module/activity/controller/ClientActivityController.java +++ b/backend/src/main/java/com/budwk/app/client/module/activity/controller/ClientActivityController.java @@ -88,10 +88,26 @@ public class ClientActivityController { @At("/list-signup-user/?") @SaCheckLogin(type = StpClientUtil.TYPE) public Result listSignUpUser(Long activityId) { - List list = dao.query(ActUser.class, Cnd.where(ActUser::getActivityId, "=", activityId).and(ActUser::getSignUpUserId, "=", StpClientUtil.STP.getLoginIdAsLong())); + SqlExpressionGroup group = new SqlExpressionGroup(); + group.or(ActUser::getUserId, "=", StpClientUtil.STP.getLoginIdAsLong()); + group.or(ActUser::getSignUpUserId, "=", StpClientUtil.STP.getLoginIdAsLong()); + List list = dao.query(ActUser.class, Cnd.where(ActUser::getActivityId, "=", activityId).and(group)); return Result.success(list); } + /** + * 是否报名 + */ + @At("/is-sign-up/?") + @SaCheckLogin(type = StpClientUtil.TYPE) + public Result isSignUp(Long activityId) { + SqlExpressionGroup group = new SqlExpressionGroup(); + group.or(ActUser::getUserId, "=", StpClientUtil.STP.getLoginIdAsLong()); + group.or(ActUser::getSignUpUserId, "=", StpClientUtil.STP.getLoginIdAsLong()); + int count = dao.count(ActUser.class, Cnd.where(ActUser::getActivityId, "=", activityId).and(group)); + return Result.success().addData(count > 0); + } + /** * 查询我报名的活动 */ diff --git a/backend/src/main/java/com/budwk/app/client/module/activity/controller/ClientGroupController.java b/backend/src/main/java/com/budwk/app/client/module/activity/controller/ClientGroupController.java new file mode 100644 index 0000000..d74a123 --- /dev/null +++ b/backend/src/main/java/com/budwk/app/client/module/activity/controller/ClientGroupController.java @@ -0,0 +1,82 @@ +package com.budwk.app.client.module.activity.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import com.budwk.app.base.result.Result; +import com.budwk.app.client.module.activity.service.ClientActivityService; +import com.budwk.app.module.activity.models.ActGroup; +import com.budwk.app.module.activity.models.ActUser; +import com.budwk.app.web.commons.auth.satoken.StpClientUtil; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import java.util.List; + +/** + * @author zhf + * @date 2025/4/28 17:35 + * @description 我的团队 + */ +@IocBean +@At("/client/group") +@Ok("json:full") +public class ClientGroupController { + + + @Inject + private Dao dao; + @Inject + private ClientActivityService clientActivityService; + + + /** + * 查询我的活动 + * @return + */ + @At("/list-act") + @SaCheckLogin(type = StpClientUtil.TYPE) + public Result listAct(){ + Sql sql = Sqls.create(""" + SELECT + t1.id, + t1.title, + t1.address, + t1.startTime, + t1.endTime, + t1.signStartTime, + t1.signEndTime + FROM + activity t1 + LEFT JOIN act_user t2 ON t1.id = t2.activityId + WHERE + t2.userId = @userId + AND t2.isSignIn =1 + """).setParam("userId", StpClientUtil.STP.getLoginIdAsLong()); + List list = clientActivityService.listMap(sql); + return Result.success(list); + } + + @At("/info/?") + @SaCheckLogin(type = StpClientUtil.TYPE) + public Result info(Long activityId){ + ActGroup group = dao.fetch(ActGroup.class, Cnd.where(ActGroup::getActivityId, "=", activityId)); + return Result.success(); + } + + + /** + * 查询团队成员 + */ + @At("/list-team-user/?") + @SaCheckLogin(type = StpClientUtil.TYPE) + public Result listTeamUser(Long activityId){ + List list = dao.query(ActUser.class, Cnd.where(ActUser::getActivityId, "=", activityId).and(ActUser::getIsSignIn, "=", 1)); + return Result.success(list); + } +} diff --git a/backend/src/main/java/com/budwk/app/client/module/activity/controller/ClientProfileController.java b/backend/src/main/java/com/budwk/app/client/module/activity/controller/ClientProfileController.java new file mode 100644 index 0000000..618f968 --- /dev/null +++ b/backend/src/main/java/com/budwk/app/client/module/activity/controller/ClientProfileController.java @@ -0,0 +1,77 @@ +package com.budwk.app.client.module.activity.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import com.budwk.app.base.page.PageForm; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.result.Result; +import com.budwk.app.client.module.activity.service.ClientActivityService; +import com.budwk.app.web.commons.auth.satoken.StpClientUtil; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.dao.util.cri.SqlExpressionGroup; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.adaptor.JsonAdaptor; +import org.nutz.mvc.annotation.AdaptBy; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +/** + * @author zhf + * @date 2025/4/28 15:59 + * @description 我的 + */ +@IocBean +@At("/client/profile") +@Ok("json:full") +public class ClientProfileController { + + @Inject + private ClientActivityService clientActivityService; + @Inject + private Dao dao; + + @At("/list-act") + @AdaptBy(type = JsonAdaptor.class) + @SaCheckLogin(type = StpClientUtil.TYPE) + public Result listAct(PageForm pageForm) { + Sql sql = Sqls.create(""" + SELECT + t1.id, + t1.title, + t1.address, + t1.startTime, + t1.endTime, + t1.signStartTime, + t1.signEndTime, + t1.cover, + t1.coHostUnit + FROM + activity t1 + LEFT JOIN act_user t2 ON t1.id=t2.activityId + $condition + """); + Cnd cnd = Cnd.NEW(); + SqlExpressionGroup group = new SqlExpressionGroup(); + group.or("t2.userId", "=", StpClientUtil.STP.getLoginIdAsLong()); + group.or("t2.signUpUserId", "=", StpClientUtil.STP.getLoginIdAsLong()); + cnd.groupBy("t1.id"); + cnd.and(group); + sql.setCondition(cnd); + Pagination pagination = clientActivityService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + /** + * 取消报名 + */ + @At("/cancel-sign-up/?") + @SaCheckLogin(type = StpClientUtil.TYPE) + public Result cancelSignUp(Long activityId) { + clientActivityService.cancelSignUp(activityId); + return Result.success(); + } + +} diff --git a/backend/src/main/java/com/budwk/app/client/module/activity/service/ClientActivityService.java b/backend/src/main/java/com/budwk/app/client/module/activity/service/ClientActivityService.java index 785db10..27bd184 100644 --- a/backend/src/main/java/com/budwk/app/client/module/activity/service/ClientActivityService.java +++ b/backend/src/main/java/com/budwk/app/client/module/activity/service/ClientActivityService.java @@ -25,4 +25,8 @@ public interface ClientActivityService extends BaseService { void signIn(Long activityId); + /** + * 取消报名 + */ + void cancelSignUp(Long activityId); } diff --git a/backend/src/main/java/com/budwk/app/client/module/activity/service/impl/ClientActivityServiceImpl.java b/backend/src/main/java/com/budwk/app/client/module/activity/service/impl/ClientActivityServiceImpl.java index 66b53c7..954a2d4 100644 --- a/backend/src/main/java/com/budwk/app/client/module/activity/service/impl/ClientActivityServiceImpl.java +++ b/backend/src/main/java/com/budwk/app/client/module/activity/service/impl/ClientActivityServiceImpl.java @@ -14,6 +14,7 @@ import org.nutz.dao.Dao; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Lang; import org.nutz.lang.util.NutMap; import java.time.LocalDate; @@ -49,7 +50,7 @@ public class ClientActivityServiceImpl extends BaseServiceImpl impleme List userList = signVO.getUserList(); // 首先检查报名人员是否已经在用户表中 for (ActUser user : userList) { - Client_user clientUser = dao().fetch(Client_user.class, Cnd.where(Client_user::getIdCard, "=", user.getIdCard())); + Client_user clientUser = dao().fetch(Client_user.class, Cnd.where(Client_user::getIdCard, "=", user.getIdCard()).or(Client_user::getPhone, "=", user.getPhone())); if (clientUser == null) { // 创建用户 clientUser = new Client_user(); @@ -100,4 +101,13 @@ public class ClientActivityServiceImpl extends BaseServiceImpl impleme actUser.setSignInTime(LocalDateTime.now()); dao().update(actUser, "isSignIn|signInTime"); } + + @Override + public void cancelSignUp(Long activityId) { + ActUser actUser = dao().fetch(ActUser.class, Cnd.where(ActUser::getActivityId, "=", activityId).and(ActUser::getSignUpUserId, "=", StpClientUtil.STP.getLoginIdAsLong())); + if (Lang.isEmpty(actUser)) { + throw new BaseException("请联系报名人取消报名!"); + } + dao().clear(ActUser.class, Cnd.where(ActUser::getActivityId, "=", activityId).and(ActUser::getSignUpUserId, "=", StpClientUtil.STP.getLoginIdAsLong())); + } } diff --git a/backend/src/main/java/com/budwk/app/module/activity/models/ActGroup.java b/backend/src/main/java/com/budwk/app/module/activity/models/ActGroup.java index 5ee94b2..c0978a6 100644 --- a/backend/src/main/java/com/budwk/app/module/activity/models/ActGroup.java +++ b/backend/src/main/java/com/budwk/app/module/activity/models/ActGroup.java @@ -5,6 +5,8 @@ import lombok.Data; import lombok.EqualsAndHashCode; import org.nutz.dao.entity.annotation.*; +import java.math.BigDecimal; + /** * @version 1.0 * @Author zzr @@ -14,7 +16,7 @@ import org.nutz.dao.entity.annotation.*; */ @Data @Comment("活动队伍") -//@Table("act_group") +@Table("act_group") @EqualsAndHashCode(callSuper = true) @TableMeta("{'mysql-charset':'utf8mb4'}") public class ActGroup extends BaseModel { @@ -23,18 +25,24 @@ public class ActGroup extends BaseModel { @Comment("ID") private Long id; + @Column + @Comment("活动ID") + @ColDefine(customType = "bigint") + private Long activityId; + @Column @Comment("队伍名称") @ColDefine(type = ColType.VARCHAR, width = 255) private String groupName; @Column - @Comment("领队Id") - @ColDefine(customType = "bigint") - private Long groupLeaderId; + @Comment("队伍总得分") + @ColDefine(customType = "decimal", width = 10, precision = 2) + private BigDecimal totalScore; @Column - @Comment("领队名称") - @ColDefine(type = ColType.VARCHAR, width = 128) - private Long groupLeaderName; + @Comment("队伍总排名") + @ColDefine(type = ColType.INT) + private Integer totalRank; + } diff --git a/backend/src/main/java/com/budwk/app/module/activity/models/ActGroupUser.java b/backend/src/main/java/com/budwk/app/module/activity/models/ActGroupUser.java index 0a626d5..dc5745c 100644 --- a/backend/src/main/java/com/budwk/app/module/activity/models/ActGroupUser.java +++ b/backend/src/main/java/com/budwk/app/module/activity/models/ActGroupUser.java @@ -3,10 +3,7 @@ package com.budwk.app.module.activity.models; import com.budwk.app.base.model.BaseModel; import lombok.Data; import lombok.EqualsAndHashCode; -import org.nutz.dao.entity.annotation.Comment; -import org.nutz.dao.entity.annotation.Id; -import org.nutz.dao.entity.annotation.Table; -import org.nutz.dao.entity.annotation.TableMeta; +import org.nutz.dao.entity.annotation.*; /** * @version 1.0 @@ -17,7 +14,7 @@ import org.nutz.dao.entity.annotation.TableMeta; */ @Data @Comment("活动队伍人员") -//@Table("act_group_user") +@Table("act_group_user") @EqualsAndHashCode(callSuper = true) @TableMeta("{'mysql-charset':'utf8mb4'}") public class ActGroupUser extends BaseModel { @@ -25,4 +22,19 @@ public class ActGroupUser extends BaseModel { @Id @Comment("ID") private Long id; + + @Column + @Comment("队伍Id") + @ColDefine(customType = "bigint") + private Long groupId; + + @Column + @Comment("用户id") + @ColDefine(customType = "bigint") + private Long userId; + + @Column + @Comment("是否领队") + @ColDefine(type = ColType.BOOLEAN) + private Boolean isLeader; } diff --git a/backend/src/main/java/com/budwk/app/module/activity/models/ActItemGroupScore.java b/backend/src/main/java/com/budwk/app/module/activity/models/ActItemGroupScore.java new file mode 100644 index 0000000..0ae5a26 --- /dev/null +++ b/backend/src/main/java/com/budwk/app/module/activity/models/ActItemGroupScore.java @@ -0,0 +1,49 @@ +package com.budwk.app.module.activity.models; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; + +import java.math.BigDecimal; + +/** + * @author zhf + * @date 2025/4/28 17:55 + * @description + */ +@Data +@Comment("活动项目队伍得分表") +@Table("act_item_group_score") +@EqualsAndHashCode(callSuper = true) +@TableMeta("{'mysql-charset':'utf8mb4'}") +public class ActItemGroupScore extends BaseModel { + + @Id + @Comment("ID") + private Long id; + + @Column + @Comment("活动ID") + @ColDefine(customType = "bigint") + private Long activityId; + + @Column + @Comment("活动项目ID") + @ColDefine(customType = "bigint") + private Long itemId; + + @Column + @Comment("队伍ID") + @ColDefine(customType = "bigint") + private Long groupId; + + @Column + @Comment("队伍得分") + @ColDefine(customType = "decimal", width = 10, precision = 2) + private BigDecimal score; + + @Column + @Comment("队伍排名") + private Integer rank; +} diff --git a/backend/src/main/java/com/budwk/app/module/activity/models/ActivityItemUser.java b/backend/src/main/java/com/budwk/app/module/activity/models/ActivityItemUser.java index 35e0ba5..84bf71e 100644 --- a/backend/src/main/java/com/budwk/app/module/activity/models/ActivityItemUser.java +++ b/backend/src/main/java/com/budwk/app/module/activity/models/ActivityItemUser.java @@ -5,6 +5,8 @@ import lombok.Data; import lombok.EqualsAndHashCode; import org.nutz.dao.entity.annotation.*; +import java.time.LocalDateTime; + @Data @Table("act_item_user") @Comment("项目报名人员") diff --git a/frontend/src/pages/activity/detail/index.vue b/frontend/src/pages/activity/detail/index.vue index ac429e8..2fd6002 100644 --- a/frontend/src/pages/activity/detail/index.vue +++ b/frontend/src/pages/activity/detail/index.vue @@ -17,25 +17,30 @@ - + 报名时间 - {{ formatDate(detailData.signStartTime) }} 至 {{ formatDate(detailData.signEndTime) }} + {{ formatDate(detailData.signStartTime) }} 至 + {{ formatDate(detailData.signEndTime) }} + - + 活动时间 - {{ formatDate(detailData.startTime) }} 至 {{ formatDate(detailData.endTime) }} + {{ formatDate(detailData.startTime) }} 至 {{ + formatDate(detailData.endTime) + }} + - + 活动地点 {{ detailData.address }} @@ -59,7 +64,8 @@ :navigation="{ type: 'fraction', paginationPosition: 'bottom-right' }" height="500px" > - + {{ index + 1 }} @@ -80,7 +86,7 @@ - + 活动形式 {{ item.form }} @@ -88,7 +94,7 @@ - + 评分规则 {{ item.rule }} @@ -99,57 +105,60 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - 立即报名 + + + {{ bottomButton.text }} + @@ -157,13 +166,14 @@ @@ -461,14 +517,14 @@ onLoad((option) => { } } -::v-deep .t-swiper__container{ +::v-deep .t-swiper__container { //min-height: 300rpx!important; height: unset; } -::v-deep .t-swiper-item{ +::v-deep .t-swiper-item { //height: 100%!important; - height: unset!important; + height: unset !important; } diff --git a/frontend/src/pages/activity/list/index.vue b/frontend/src/pages/activity/list/index.vue index bfd8a7a..070b8df 100644 --- a/frontend/src/pages/activity/list/index.vue +++ b/frontend/src/pages/activity/list/index.vue @@ -55,7 +55,7 @@ - {{ item.address }} + {{ item.coHostUnit }} @@ -63,9 +63,6 @@ 100人已报名 - - - 立即报名 diff --git a/frontend/src/pages/activity/registration-form/index.vue b/frontend/src/pages/activity/registration-form/index.vue index cf2ef12..7a611ce 100644 --- a/frontend/src/pages/activity/registration-form/index.vue +++ b/frontend/src/pages/activity/registration-form/index.vue @@ -74,8 +74,8 @@ - - + + @@ -101,7 +101,7 @@ shape="round" @click="onSubmit" > - 提交报名 + {{ isSignUp ? '重新提交报名信息' : '提交报名'}} @@ -115,6 +115,7 @@ import {onLoad} from "@dcloudio/uni-app"; const request = useRequest() const actId = ref(null) +const isSignUp = ref(null) const agreementChecked = ref(false) const formRef = ref(null) const formData = ref({ @@ -127,7 +128,7 @@ const formData = ref({ position: "测试", idCard: "421087200004040010", phone: "18899998888", - isStay: "1" + isStay: true }] }) @@ -136,6 +137,7 @@ onLoad((option) => { actId.value = option.id formData.value.activityId = option.id listSignUpUser() + getIsSignUp() } else { Toast({message: 'ID不存在', theme: 'error'}); } @@ -158,6 +160,20 @@ async function listSignUpUser() { } } +// 判断是否报名 +async function getIsSignUp() { + try { + const {code, data} = await request.get('/client/activity/is-sign-up/' + actId.value) + if (code === 0) { + isSignUp.value = data + } else { + Toast({message: '判断是否报名失败', theme: 'error'}); + } + } catch (e) { + console.error(e) + } +} + // 表单验证 async function validaForm() { return new Promise((resolve, reject) => { diff --git a/frontend/src/pages/profile/act.vue b/frontend/src/pages/profile/act.vue new file mode 100644 index 0000000..9662d05 --- /dev/null +++ b/frontend/src/pages/profile/act.vue @@ -0,0 +1,291 @@ + + + + + diff --git a/frontend/src/pages/profile/index.vue b/frontend/src/pages/profile/index.vue index 3d03ce7..752913b 100644 --- a/frontend/src/pages/profile/index.vue +++ b/frontend/src/pages/profile/index.vue @@ -87,15 +87,12 @@ onMounted(() => { -