From 1f5f2218503fb7f547093bdfcaaf2eef2ea379b2 Mon Sep 17 00:00:00 2001 From: "@jyuhsin" <729757837@qq.com> Date: Sun, 4 Jan 2026 14:28:56 +0800 Subject: [PATCH] commit --- src/main/java/com/budwk/app/MainLauncher.java | 5 +- .../culture/scanHandle/CultureScanHandle.java | 91 ++++++ .../zhgh/scan/controller/ScanController.java | 52 ++++ .../app/zhgh/scan/core/ScanDispatcher.java | 52 ++++ .../budwk/app/zhgh/scan/core/ScanHandler.java | 22 ++ .../resources/views/layouts/platform_h5.html | 4 + .../views/platform/zhghh5/scan/index.html | 272 ++++++++++++++++++ .../views/platform/zhghh5/sys/home/mine.js | 38 ++- 8 files changed, 534 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/budwk/app/zhgh/activity/culture/scanHandle/CultureScanHandle.java create mode 100644 src/main/java/com/budwk/app/zhgh/scan/controller/ScanController.java create mode 100644 src/main/java/com/budwk/app/zhgh/scan/core/ScanDispatcher.java create mode 100644 src/main/java/com/budwk/app/zhgh/scan/core/ScanHandler.java create mode 100644 src/main/resources/views/platform/zhghh5/scan/index.html diff --git a/src/main/java/com/budwk/app/MainLauncher.java b/src/main/java/com/budwk/app/MainLauncher.java index 2f6b025..af6d415 100644 --- a/src/main/java/com/budwk/app/MainLauncher.java +++ b/src/main/java/com/budwk/app/MainLauncher.java @@ -9,6 +9,7 @@ import com.budwk.app.web.commons.auth.satoken.SaTokenDaoRedisImpl; import com.budwk.app.web.commons.auth.satoken.StpInterfaceImpl; import com.budwk.app.web.commons.base.Globals; import com.budwk.app.web.commons.ext.pubsub.WebPubSub; +import com.budwk.app.zhgh.scan.core.ScanDispatcher; import lombok.extern.slf4j.Slf4j; import org.beetl.core.GroupTemplate; import org.nutz.boot.NbApp; @@ -81,7 +82,9 @@ public class MainLauncher { init_task(); init_auth(); ioc.get(Globals.class); - } + + ioc.get(ScanDispatcher.class); + } public void init_auth() { SaTokenConfig saTokenConfig = conf.makeDeep(SaTokenConfig.class, PRE); diff --git a/src/main/java/com/budwk/app/zhgh/activity/culture/scanHandle/CultureScanHandle.java b/src/main/java/com/budwk/app/zhgh/activity/culture/scanHandle/CultureScanHandle.java new file mode 100644 index 0000000..5de522a --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/culture/scanHandle/CultureScanHandle.java @@ -0,0 +1,91 @@ +package com.budwk.app.zhgh.activity.culture.scanHandle; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.result.Result; +import com.budwk.app.sys.views.View_user; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.activity.basic.models.ActivityUserScope; +import com.budwk.app.zhgh.activity.culture.models.ActivityTissue; +import com.budwk.app.zhgh.activity.culture.models.ActivityTissuePerson; +import com.budwk.app.zhgh.scan.core.ScanHandler; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; + +import java.util.Map; + +/** + * @ClassName CultureScanHandle + * @Author JyuHsin + * @Date 2025/12/30 15:43 + * @Version 1.0 + * @Description TODO + */ +@IocBean +public class CultureScanHandle implements ScanHandler { + + @Inject + private Dao dao; + + @Override + public String getBizType() { + return "culture"; + } + + @Override + public Object handle(Map params) { + // 获取参数 + String userId = params.get("userId").toString(); + boolean handle = (Boolean) params.get("handle"); + String activityId = "123"; + + View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", userId)); + + // 查询活动 + ActivityTissue tissue = dao.fetch(ActivityTissue.class, activityId); + if (tissue == null || tissue.getGroupId() == null) { + return Result.error(99, user.getUsername() + "不在活动范围内"); + } + + int scopeCount = dao.count(ActivityUserScope.class, Cnd.where("groupId", "=", tissue.getGroupId()).and("userId", "=", userId)); + if (scopeCount == 0) { + return Result.error(99, user.getUsername() + "不在活动范围内"); + } + + ActivityTissuePerson tissuePerson = dao.fetch(ActivityTissuePerson.class, Cnd.where("tissueId", "=", activityId).and("userId", "=", userId)); + if (tissuePerson != null) { + return Result.error(99, user.getUsername() + "已入场
入场时间:" + tissuePerson.getApplyDateTime()); + } + + // 插入报名表 + if(handle) { + ActivityTissuePerson person = new ActivityTissuePerson(); + person.setTissueId(activityId); + person.setUserId(userId); + person.setApplyUserId(SecurityUtil.getUserId()); + person.setApplyUserUserName(SecurityUtil.getUserUsername()); + person.setUserName(user.getUsername()); + person.setLoginName(user.getLoginname()); + person.setSex(user.getSex()); + person.setMobile(user.getMobile()); + person.setUnitName(user.getUnitName()); + person.setUnionName(user.getUnionName()); + person.setSign(false); + person.setApplyDateTime(DateUtil.now()); + person.setUnitId(user.getUnitId()); + person.setUnionId(user.getUnionId()); + + dao.insert(person); + return Result.success(); + } + + String msg = "姓名:" + user.getUsername() + "
"; + msg += "工号:" + user.getLoginname() + "
"; + msg += "所属单位:" + user.getUnitName() + "
"; + msg += "所属工会:" + user.getUnionName() + "
"; + msg += "身份证号:" + StrUtil.blankToDefault(user.getIdCard(), "暂无") + "
"; + return Result.success(msg); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/scan/controller/ScanController.java b/src/main/java/com/budwk/app/zhgh/scan/controller/ScanController.java new file mode 100644 index 0000000..360d660 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/scan/controller/ScanController.java @@ -0,0 +1,52 @@ +package com.budwk.app.zhgh.scan.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.result.Result; +import com.budwk.app.zhgh.scan.core.ScanDispatcher; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.json.Json; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.POST; +import org.nutz.mvc.annotation.Param; + +import java.util.Map; + +/** + * @ClassName ScanController + * @Author JyuHsin + * @Date 2025/12/29 15:28 + * @Version 1.0 + * @Description TODO + */ +@Slf4j +@IocBean +@Ok("json:full") +@Api(tags = "活动扫码") +@At("/platform/scan") +public class ScanController { + + @Inject + private ScanDispatcher dispatcher; + + @At("/h5") + @SaCheckPermission("h5.scan") + @Ok("beetl:/platform/zhghh5/scan/index.html") + public void h5Index() {} + + @At("/handle") + @Ok("json") + @SaCheckLogin + public Object handle(@Param("bizType") String bizType, @Param("params") String params) { + if(StrUtil.isBlank(bizType)) { + return Result.error("参数缺失"); + } + Map paramsMap = Json.fromJson(Map.class, params); + return dispatcher.dispatch(bizType, paramsMap); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/scan/core/ScanDispatcher.java b/src/main/java/com/budwk/app/zhgh/scan/core/ScanDispatcher.java new file mode 100644 index 0000000..c7fb82d --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/scan/core/ScanDispatcher.java @@ -0,0 +1,52 @@ +package com.budwk.app.zhgh.scan.core; + +import org.nutz.ioc.Ioc; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @ClassName ScanDispatcher + * @Author JyuHsin + * @Date 2025/12/30 15:10 + * @Version 1.0 + * @Description TODO + */ +@IocBean(create = "init") +public class ScanDispatcher { + + @Inject("refer:$ioc") + private Ioc ioc; + + // NutzBoot 自动注入所有 @IocBean 的 ScanHandler 实例到 Map + @Inject + private Map handlerBeans; + + private Map bizTypeToHandler = new HashMap<>(); + + public ScanDispatcher() {} + + public void init() { + String[] names = ioc.getNamesByType(ScanHandler.class); + System.out.println("找到 ScanHandler Bean 名称: " + names); + + for (String name : names) { + ScanHandler handler = ioc.get(ScanHandler.class, name); + bizTypeToHandler.put(handler.getBizType(), handler); + } + + System.out.println("已加载 ScanHandler: " + bizTypeToHandler.keySet()); + } + + public Object dispatch(String bizType, Map params) { + ScanHandler handler = bizTypeToHandler.get(bizType); + if (handler == null) { + throw new IllegalArgumentException("不支持的业务类型: " + bizType); + } + return handler.handle(params); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/scan/core/ScanHandler.java b/src/main/java/com/budwk/app/zhgh/scan/core/ScanHandler.java new file mode 100644 index 0000000..3a79f8a --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/scan/core/ScanHandler.java @@ -0,0 +1,22 @@ +package com.budwk.app.zhgh.scan.core; + +import java.util.Map; + +/** + * @ClassName ScanHandler + * @Author JyuHsin + * @Date 2025/12/30 15:09 + * @Version 1.0 + * @Description TODO + */ +public interface ScanHandler { + + String getBizType(); // 如 "meeting" + + /** + * 直接传参,不包装 Context + * @param params 业务参数 + * @return 处理结果 + */ + Object handle(Map params); +} diff --git a/src/main/resources/views/layouts/platform_h5.html b/src/main/resources/views/layouts/platform_h5.html index b242eda..8345ce2 100644 --- a/src/main/resources/views/layouts/platform_h5.html +++ b/src/main/resources/views/layouts/platform_h5.html @@ -67,6 +67,9 @@ + + + + + diff --git a/src/main/resources/views/platform/zhghh5/sys/home/mine.js b/src/main/resources/views/platform/zhghh5/sys/home/mine.js index c8df7db..08fa82b 100644 --- a/src/main/resources/views/platform/zhghh5/sys/home/mine.js +++ b/src/main/resources/views/platform/zhghh5/sys/home/mine.js @@ -79,6 +79,13 @@ const mine = { + + + + 电子身份码 + + + @@ -91,7 +98,12 @@ const mine = {
退出登录
+ + + + + `, computed: { avatar() { @@ -103,6 +115,13 @@ const mine = { } } }, + store, + data() { + return { + codeVisible: false, + codeAddress: '', + } + }, methods: { logout() { this.$dialog @@ -113,10 +132,27 @@ const mine = { .then(() => { this.$store.dispatch("logout") }) - } + }, + codeValid() { + if(this.$store.state.user.member === true || ['年薪制', '境外聘用', '劳务派遣一类', '劳务派遣二类'].includes(this.$store.state.user.preparedBy)) { + return true + } + return false + }, + qrCode() { + this.codeVisible = true + this.codeAddress = JSON.stringify({userId: this.$store.state.user.id, bizType: 'culture'}) + }, }, style() { return /*language=CSS*/ ` + + .qrcode { + transition: opacity 0.5s ease; + display: block; + margin: 0 auto; + } + .home-mine { background: #f7f8fa; }