diff --git a/backend/src/main/java/com/budwk/app/client/auth/controller/ClientAuthController.java b/backend/src/main/java/com/budwk/app/client/auth/controller/ClientAuthController.java index 84b363c..4a8445a 100644 --- a/backend/src/main/java/com/budwk/app/client/auth/controller/ClientAuthController.java +++ b/backend/src/main/java/com/budwk/app/client/auth/controller/ClientAuthController.java @@ -1,22 +1,17 @@ package com.budwk.app.client.auth.controller; import cn.dev33.satoken.annotation.SaCheckLogin; -import cn.dev33.satoken.stp.StpUtil; import com.budwk.app.base.constant.RedisConstant; import com.budwk.app.base.exception.BaseException; import com.budwk.app.base.result.Result; import com.budwk.app.client.auth.service.ClientAuthService; import com.budwk.app.client.auth.vo.ClientLoginBody; -import com.budwk.app.sys.models.Client_user; -import com.budwk.app.sys.models.Sys_log; -import com.budwk.app.sys.models.Sys_user; import com.budwk.app.sys.services.SysMsgService; import com.budwk.app.sys.services.SysUserService; import com.budwk.app.web.commons.auth.satoken.StpClientUtil; import com.budwk.app.web.commons.auth.service.ValidateService; import com.budwk.app.web.commons.slog.SLogService; import lombok.extern.slf4j.Slf4j; -import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.integration.jedis.RedisService; import org.nutz.ioc.loader.annotation.Inject; diff --git a/backend/src/main/java/com/budwk/app/sys/models/Client_user.java b/backend/src/main/java/com/budwk/app/client/auth/models/Client_user.java similarity index 93% rename from backend/src/main/java/com/budwk/app/sys/models/Client_user.java rename to backend/src/main/java/com/budwk/app/client/auth/models/Client_user.java index 801e603..d66f095 100644 --- a/backend/src/main/java/com/budwk/app/sys/models/Client_user.java +++ b/backend/src/main/java/com/budwk/app/client/auth/models/Client_user.java @@ -1,4 +1,4 @@ -package com.budwk.app.sys.models; +package com.budwk.app.client.auth.models; import com.budwk.app.base.model.BaseModel; import lombok.Data; @@ -6,7 +6,6 @@ import lombok.EqualsAndHashCode; import org.nutz.dao.entity.annotation.*; import java.io.Serializable; -import java.time.LocalDateTime; @Data @EqualsAndHashCode(callSuper = true) diff --git a/backend/src/main/java/com/budwk/app/client/auth/service/ClientAuthServiceImpl.java b/backend/src/main/java/com/budwk/app/client/auth/service/ClientAuthServiceImpl.java index d83d817..625393c 100644 --- a/backend/src/main/java/com/budwk/app/client/auth/service/ClientAuthServiceImpl.java +++ b/backend/src/main/java/com/budwk/app/client/auth/service/ClientAuthServiceImpl.java @@ -1,9 +1,8 @@ package com.budwk.app.client.auth.service; import com.budwk.app.base.exception.BaseException; -import com.budwk.app.base.result.Result; import com.budwk.app.client.auth.vo.ClientLoginBody; -import com.budwk.app.sys.models.Client_user; +import com.budwk.app.client.auth.models.Client_user; import com.budwk.app.web.commons.auth.satoken.StpClientUtil; import com.budwk.app.web.commons.auth.service.ValidateService; import org.nutz.dao.Cnd; diff --git a/backend/src/main/java/com/budwk/app/client/module/activity/vo/ClientActivitySignVO.java b/backend/src/main/java/com/budwk/app/client/module/activity/vo/ClientActivitySignVO.java index d7d82e8..f69d208 100644 --- a/backend/src/main/java/com/budwk/app/client/module/activity/vo/ClientActivitySignVO.java +++ b/backend/src/main/java/com/budwk/app/client/module/activity/vo/ClientActivitySignVO.java @@ -1,12 +1,14 @@ package com.budwk.app.client.module.activity.vo; import com.budwk.app.module.activity.models.ActUser; +import lombok.Data; import java.util.List; /** * 报名 */ +@Data public class ClientActivitySignVO { private String activityId; diff --git a/backend/src/main/java/com/budwk/app/module/activity/controller/ActGroupController.java b/backend/src/main/java/com/budwk/app/module/activity/controller/ActGroupController.java new file mode 100644 index 0000000..5859bdd --- /dev/null +++ b/backend/src/main/java/com/budwk/app/module/activity/controller/ActGroupController.java @@ -0,0 +1,44 @@ +package com.budwk.app.module.activity.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.budwk.app.base.page.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.module.activity.service.ActUserService; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +/** + * @version 1.0 + * @Author zzr + * @name:ActGroupController + * @Date 2025/4/25 16:03 + * @注释 活动签到人员分组 + */ +@Slf4j +@IocBean +@Ok("json:full") +@At("/platform/activity/group") +public class ActGroupController { + + @Inject + private Dao dao; + @Inject + private ActUserService actUserService; + + @At("") + @SaCheckPermission("activity.group") + @Ok("beetl:/platform/activity/group/index.html") + public void index() { + } + + + @At + @SaCheckPermission("activity.group") + public Result pageData(PageForm pageForm, String activityId){ + return null; + } +} diff --git a/backend/src/main/java/com/budwk/app/module/activity/controller/ActUserController.java b/backend/src/main/java/com/budwk/app/module/activity/controller/ActUserController.java index 3bf1995..34cfd77 100644 --- a/backend/src/main/java/com/budwk/app/module/activity/controller/ActUserController.java +++ b/backend/src/main/java/com/budwk/app/module/activity/controller/ActUserController.java @@ -1,23 +1,43 @@ package com.budwk.app.module.activity.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.date.DateUtil; +import com.budwk.app.base.page.Pagination; import com.budwk.app.base.result.Result; +import com.budwk.app.client.auth.models.Client_user; +import com.budwk.app.client.module.activity.vo.ClientActivitySignVO; +import com.budwk.app.module.activity.models.ActUser; +import com.budwk.app.module.activity.models.Activity; import com.budwk.app.module.activity.service.ActUserService; +import com.budwk.app.module.activity.vo.page.ActUserPageForm; +import com.budwk.app.web.commons.slog.annotation.SLog; import lombok.extern.slf4j.Slf4j; +import org.nutz.aop.interceptor.ioc.TransAop; +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.aop.Aop; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Lang; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.concurrent.locks.ReentrantLock; +import java.util.stream.Collectors; /** * @version 1.0 * @Author zzr * @name:ActUserController * @Date 2025/4/24 18:31 - * @注释 + * @注释 活动报名人员 */ @Slf4j @IocBean @@ -39,28 +59,135 @@ public class ActUserController { @At @SaCheckPermission("activity.user") - public Result pageData(){ - return null; + public Result pageData(ActUserPageForm pageForm){ + Sql sql = actUserService.getSignUpSql(pageForm); + Pagination pagination = actUserService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); } - - private final ReentrantLock lock = new ReentrantLock(true); @At + @Aop(TransAop.READ_COMMITTED) @SaCheckPermission("activity.user") - public Result signUpActivity(){ + @SLog(tag = "报名人员管理", msg = "电脑端替他人报名") + public Result doAddActUser(ClientActivitySignVO vo){ try { lock.lock(); -// new Act + // 报名时间 + LocalDateTime localDateTime = DateUtil.date().toLocalDateTime(); + // 活动id + Long activityId = Long.parseLong(vo.getActivityId()); + List userList = vo.getUserList(); + // 在系统的人,要区分是否已经报了名,报名了的就修改记录,没报名的添加记录 + List doSignUserList = userList.stream().filter(user -> user.getUserId() != null).toList(); + Set userIdSet = doSignUserList.stream().map(ActUser::getUserId).collect(Collectors.toSet()); + List signUpUser = dao.query(ActUser.class, Cnd.where("userId", "in", userIdSet).and(ActUser::getActivityId, "=", activityId)); + + if (Lang.isNotEmpty(signUpUser)) { + Map map = signUpUser.stream().collect(Collectors.toMap(ActUser::getUserId, user -> user)); + for (ActUser user : doSignUserList) { + ActUser actUser = map.get(user.getUserId()); + if (actUser != null) { + user.setId(actUser.getId()); + } + user.setUserId(user.getUserId()); + user.setSignUpTime(localDateTime); + user.setSignUpContacts(vo.getContactName()); + user.setSignUpMobile(vo.getContactPhone()); + user.setActivityId(activityId); + user.setUnitName(vo.getUnitName()); + } + dao.insertOrUpdate(doSignUserList); + } else { + for (ActUser user : doSignUserList) { + user.setUserId(user.getUserId()); + user.setSignUpTime(localDateTime); + user.setSignUpContacts(vo.getContactName()); + user.setSignUpMobile(vo.getContactPhone()); + user.setActivityId(activityId); + user.setUnitName(vo.getUnitName()); + } + dao.insertOrUpdate(doSignUserList); + } + + // 找出不在系统的人,添加到client_user表中,再添加报名记录 + List needInitClientUserList = userList.stream().filter(user -> user.getUserId() == null).toList(); + for (ActUser user : needInitClientUserList) { + Client_user clientUser = new Client_user(); + clientUser.setUserName(user.getUserName()); + clientUser.setSex(user.getSex()); + clientUser.setPhone(user.getPhone()); + dao.insert(clientUser); + + user.setUserId(clientUser.getId()); + user.setSignUpTime(localDateTime); + user.setSignUpContacts(vo.getContactName()); + user.setSignUpMobile(vo.getContactPhone()); + user.setActivityId(activityId); + user.setUnitName(vo.getUnitName()); + } + dao.insert(needInitClientUserList); return Result.success(); } catch (Exception e) { - lock.unlock(); + e.printStackTrace(); return Result.error(); } finally { lock.unlock(); } } + + + @At + @SaCheckPermission("activity.user") + @SLog(tag = "报名人员管理", msg = "删除报名人员") + public Result doDeleteActUser(String id){ + dao.delete(ActUser.class, id); + return Result.success(); + } + + + @At + @SaCheckPermission("activity.user") + @SLog(tag = "报名人员管理", msg = "修改报名人员信息") + public Result doModifyActUser(ActUser actUser){ + dao.updateIgnoreNull(actUser); + return Result.success(); + } + + + @At + @SaCheckPermission("activity.user") + public Result findSignUserInfo(String userId){ + return Result.success(dao.fetch(ActUser.class, Cnd.where(ActUser::getUserId, "=", userId))); + } + + + /** + * 获取当前年度的所有活动信息 + */ + @At + @SaCheckPermission("activity.user") + public Result getActivityList(String year){ + List activityList = dao.query(Activity.class, Cnd.where("YEAR(startTime)", "=", year).and(Activity::getDelFlag, "=", false)); + return Result.success(activityList); + } + + + @At + @SaCheckPermission("activity.user") + public Result queryUser(String query, String activityId){ + Sql sql = Sqls.create("SELECT id,username,phone FROM client_user $condition"); + Cnd cnd = Cnd.NEW(); + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.orLike("username", query); + seg.orLike("phone", query); + cnd.and(seg); +// cnd.and(new Static(" id not in (select userId from act_user where activityId = '%s' AND userId IS NOT NULL)".formatted(activityId))); + sql.setCondition(cnd); + Pagination pagination = actUserService.listPageMap(1, 10, sql); + return Result.success(pagination); + } } diff --git a/backend/src/main/java/com/budwk/app/module/activity/service/impl/ActUserServiceImpl.java b/backend/src/main/java/com/budwk/app/module/activity/service/impl/ActUserServiceImpl.java index 3458597..be65f9b 100644 --- a/backend/src/main/java/com/budwk/app/module/activity/service/impl/ActUserServiceImpl.java +++ b/backend/src/main/java/com/budwk/app/module/activity/service/impl/ActUserServiceImpl.java @@ -1,12 +1,15 @@ package com.budwk.app.module.activity.service.impl; +import cn.hutool.core.util.StrUtil; import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.module.activity.models.ActUser; import com.budwk.app.module.activity.service.ActUserService; import com.budwk.app.module.activity.vo.page.ActUserPageForm; +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.IocBean; /** @@ -32,8 +35,27 @@ public class ActUserServiceImpl extends BaseServiceImpl implements ActU @Override public Sql getSignUpSql(ActUserPageForm pageForm) { Sql sql = Sqls.create(""" - + SELECT + u.*, + act.`title` AS activityName + FROM + act_user u + LEFT JOIN activity act ON act.id = u.activityId + $condition """); - return null; + Cnd cnd = Cnd.NEW(); + cnd.and("u.activityId", "=", pageForm.getActivityId()); + if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.orLike("u.userName", pageForm.getSearchKeyword()); + seg.orLike("u.phone", pageForm.getSearchKeyword()); + cnd.and(seg); + } +// cnd.andEX("u.phone", "like", "%" + pageForm.getPhone() + "%"); + if (StrUtil.isNotBlank(pageForm.getUnitName())) { + cnd.and("u.unitName", "like", "%" + pageForm.getUnitName() + "%"); + } + sql.setCondition(cnd); + return sql; } } diff --git a/backend/src/main/java/com/budwk/app/web/commons/slog/SLogService.java b/backend/src/main/java/com/budwk/app/web/commons/slog/SLogService.java index 55c00e7..0e66c97 100644 --- a/backend/src/main/java/com/budwk/app/web/commons/slog/SLogService.java +++ b/backend/src/main/java/com/budwk/app/web/commons/slog/SLogService.java @@ -227,4 +227,4 @@ public class SLogService implements Runnable { sysLog.setLoginname(SecurityUtil.getUserLoginname()); return sysLog; } -} \ No newline at end of file +} diff --git a/backend/src/main/resources/views/platform/activity/group/index.html b/backend/src/main/resources/views/platform/activity/group/index.html new file mode 100644 index 0000000..e69de29 diff --git a/backend/src/main/resources/views/platform/activity/user/index.html b/backend/src/main/resources/views/platform/activity/user/index.html new file mode 100644 index 0000000..e95e554 --- /dev/null +++ b/backend/src/main/resources/views/platform/activity/user/index.html @@ -0,0 +1,399 @@ + +
+ + + + + + + 添加报名人员 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 取消 + 提交 + + + +
+ + +