From abc2f4d09734c4bacebb5f9d09198be7a33f1fe8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A8=8B=E8=AF=9A?= <1009578407@qq.com> Date: Fri, 6 Nov 2026 00:33:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E8=B0=83=E7=94=A8?= =?UTF-8?q?=E8=85=BE=E8=AE=AF=E4=BD=8D=E7=BD=AE=E6=9C=8D=E5=8A=A1api?= =?UTF-8?q?=E5=BC=80=E5=85=B3=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manage/TrainsignUpMineController.java | 10 ++++- .../impl/TrainSignUpActivityServiceImpl.java | 3 ++ .../app/zhgh/map/TencentLocationService.java | 20 ++++++++++ .../resources/views/layouts/platform_h5.html | 2 + .../activity/trainSignUp/scan/index.html | 38 +++++++++++-------- 5 files changed, 57 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainsignUpMineController.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainsignUpMineController.java index 435d174..1122fbc 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainsignUpMineController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainsignUpMineController.java @@ -13,6 +13,7 @@ import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpCourse; import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpActivity; import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpUserCourse; import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityService; +import com.budwk.app.zhgh.map.TencentLocationService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -29,6 +30,7 @@ import org.nutz.lang.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; +import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Date; @@ -65,10 +67,15 @@ public class TrainsignUpMineController { public void h5Index() { } + /** + * 打开活动签到页,并按系统开关决定是否加载腾讯地图资源。 + * @param request 用于向页面及公共布局传递本次签到定位开关 + */ @At("/scan") @SaCheckPermission("h5.trainSignUp.mine") @Ok("beetl:/platform/zhghh5/activity/trainSignUp/scan/index.html") - public void scan() { + public void scan(HttpServletRequest request) { + request.setAttribute("activitySignTencentMapEnabled", TencentLocationService.isActivitySignEnabled()); } @At @@ -244,6 +251,7 @@ public class TrainsignUpMineController { } TrainSignUpActivity activity = dao.fetch(TrainSignUpActivity.class, course.getActivityId()); NutMap data = Lang.obj2nutmap(course); + data.put("tencentMapEnabled", TencentLocationService.isActivitySignEnabled()); data.put("signExtensionEnabled", activity != null && activity.getSignPointCount() != null && activity.getSignPointCount() > 0); return Result.success(data); diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpActivityServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpActivityServiceImpl.java index 3f1c83b..a6640d5 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpActivityServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpActivityServiceImpl.java @@ -19,6 +19,7 @@ import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityServic import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityStatisticsService; import com.budwk.app.zhgh.welfare.model.WelfareProject; import com.budwk.app.zhgh.welfare.service.WelfareListService; +import com.budwk.app.zhgh.map.TencentLocationService; import com.google.common.collect.Sets; import lombok.extern.slf4j.Slf4j; import org.nutz.aop.interceptor.async.Async; @@ -854,6 +855,8 @@ public class TrainSignUpActivityServiceImpl extends BaseServiceImpl coordinates, Double latitude, Double longitude, int radius) { + // 仅跳过定位与距离校验,调用方仍校验报名、课次时间并保留重复签到处理。 + if (!TencentLocationService.isActivitySignEnabled()) return; if (!validCoordinates(coordinates) || Math.abs(coordinates.get(0)) > 90 || Math.abs(coordinates.get(1)) > 180 || radius <= 0) { throw new IllegalArgumentException("当前点位未配置有效签到坐标"); diff --git a/src/main/java/com/budwk/app/zhgh/map/TencentLocationService.java b/src/main/java/com/budwk/app/zhgh/map/TencentLocationService.java index 84432dd..e6e7386 100644 --- a/src/main/java/com/budwk/app/zhgh/map/TencentLocationService.java +++ b/src/main/java/com/budwk/app/zhgh/map/TencentLocationService.java @@ -3,6 +3,7 @@ package com.budwk.app.zhgh.map; import cn.hutool.crypto.digest.DigestUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.budwk.app.web.commons.base.Globals; import lombok.extern.slf4j.Slf4j; import org.nutz.integration.jedis.RedisService; import org.nutz.ioc.loader.annotation.Inject; @@ -100,6 +101,11 @@ public class TencentLocationService { write(response, null, error(400, "定位回调参数不合法")); return; } + // 关闭开关后,旧页面尚未完成的定位请求也不能继续调用腾讯接口。 + if (!isActivitySignEnabled()) { + write(response, callback, error(403, "当前签到无需定位,请刷新页面直接签到")); + return; + } String coordinate = request.getParameter(translate ? "locations" : "location"); String type = request.getParameter("type"); if (!validCoordinate(coordinate) || (translate && (type == null || !type.matches("[1-6]")))) { @@ -180,6 +186,16 @@ public class TencentLocationService { } } + /** + * 读取品牌活动签到定位开关,页面、签到校验和腾讯代理使用相同判断。 + * + * @return 仅明确配置为 false 时关闭,参数缺失时保留原有定位校验 + */ + public static boolean isActivitySignEnabled() { + String value = Globals.MyConfig.getString("AppActivitySignTencentMap"); + return value == null || !"false".equalsIgnoreCase(value.trim()); + } + private boolean validCoordinate(String value) { if (value == null || value.length() > 80) return false; String[] parts = value.split(",", -1); @@ -234,6 +250,10 @@ public class TencentLocationService { private void send(Job job) { synchronized (job) { if (job.done) return; + if (!isActivitySignEnabled()) { + finish(job, error(403, "当前签到无需定位,请刷新页面直接签到"), true); + return; + } long remaining = REQUEST_TIMEOUT_MS - elapsedMillis(job.createdAt); if (closed || remaining <= 0) { finish(job, error(504, "定位代理等待超时,请重新定位"), true); diff --git a/src/main/resources/views/layouts/platform_h5.html b/src/main/resources/views/layouts/platform_h5.html index 547cf19..954192d 100644 --- a/src/main/resources/views/layouts/platform_h5.html +++ b/src/main/resources/views/layouts/platform_h5.html @@ -77,7 +77,9 @@ src="https://webapi.amap.com/maps?v=2.0&key=57f0d098ba1b881ecc436c4cfd23bbbf&plugin=AMap.PolyEditor,AMap.Geolocation" >--> + +